< Module matchEval:translation.
< Prove_Constraint matchEval:host:proj_expr_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_expr_is. Proof completed.
< Prove_Constraint matchEval:host:proj_stmt_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_stmt_is. Proof completed.
< Prove_Constraint matchEval:host:proj_stmt_other. Proof completed.
< Prove_Constraint matchEval:host:proj_fun_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_fun_is. Proof completed.
< Prove_Constraint matchEval:host:proj_param_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_param_is. Proof completed.
< Prove_Constraint matchEval:host:proj_program_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_program_is. Proof completed.
< Prove_Constraint matchEval:host:proj_typ_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_typ_is. Proof completed.
< Prove_Constraint matchEval:host:proj_value_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_value_is. Proof completed.
< Add_Proj_Rel matchEval:host:is_expr, matchEval:host:is_args, matchEval:host:is_recFieldExprs. Proof completed.
< Prove_Ext_Ind matchEval:host:is_expr, matchEval:host:is_args, matchEval:host:is_recFieldExprs. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Add_Proj_Rel matchEval:host:is_stmt. Proof completed.
< Prove_Ext_Ind matchEval:host:is_stmt. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Prove matchEval:host:is_args_nilArgs_or_consArgs. Proof completed.
< Prove matchEval:host:is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs. Proof completed.
< Prove matchEval:host:vars_unique. Proof completed.
< Prove matchEval:host:vars_is. Proof completed.
< Prove matchEval:host:vars_exist, matchEval:host:varsArgs_exist, matchEval:host:varsRecFields_exist. Proof completed.
< Prove_Constraint matchEval:host:proj_expr_vars. Proof completed.
< Prove matchEval:host:typeOf_isTy. Proof completed.
< Prove matchEval:host:stmtOK_isCtx. Proof completed.
< Prove matchEval:host:stmtOK_keep_scopes. Proof completed.
< Prove matchEval:host:stmtOK_older_scopes_same. Proof completed.
< Prove matchEval:host:stmtOK_first_scope_lookup_same. Proof completed.
< Prove matchEval:host:typeOf_unique. Proof completed.
< Prove matchEval:host:stmtOK_unique. Proof completed.
< Prove matchEval:host:paramTy_is. Proof completed.
< Prove matchEval:host:getFunInfo_is. Proof completed.
< Prove matchEval:host:paramTy_exists. Proof completed.
< Prove matchEval:host:getFunInfo_exists. Proof completed.
< Prove matchEval:host:matchInt_is. Proof completed.
< Prove matchEval:host:matchString_is. Proof completed.
< Prove matchEval:host:matchRec_is. Proof completed.
< Prove matchEval:host:evalExpr_isValue, matchEval:host:evalStmt_isCtx, matchEval:host:evalArgs_isValue, matchEval:host:evalRecFields_isValue. Proof completed.
< Prove matchEval:host:evalExpr_isOutput, matchEval:host:evalStmt_isOutput, matchEval:host:evalArgs_isOutput, matchEval:host:evalRecFields_isOutput. Proof completed.
< Prove matchEval:host:paramName_is. Proof completed.
< Prove matchEval:host:getFunEvalInfo_is. Proof completed.
< Prove matchEval:host:evalProgram_isOutput. Proof completed.
< Prove matchEval:host:evalStmt_names_same. Proof completed.
< Prove matchEval:host:matchInt_unique. Proof completed.
< Prove matchEval:host:matchTrue_matchFalse_exclusive. Proof completed.
< Prove matchEval:host:matchString_unique. Proof completed.
< Prove matchEval:host:matchRec_unique. Proof completed.
< Prove matchEval:host:matchInt_matchTrue_exclusive. Proof completed.
< Prove matchEval:host:matchInt_matchFalse_exclusive. Proof completed.
< Prove matchEval:host:matchInt_matchString_exclusive. Proof completed.
< Prove matchEval:host:matchInt_matchRec_exclusive. Proof completed.
< Prove matchEval:host:matchString_matchTrue_exclusive. Proof completed.
< Prove matchEval:host:matchString_matchFalse_exclusive. Proof completed.
< Prove matchEval:host:matchString_matchRec_exclusive. Proof completed.
< Prove matchEval:host:matchRec_matchTrue_exclusive. Proof completed.
< Prove matchEval:host:matchRec_matchFalse_exclusive. Proof completed.
< Prove matchEval:host:evalExpr_rel, matchEval:host:evalExpr_rel_output, matchEval:host:evalStmt_newNameScopes_output, matchEval:host:evalStmt_newNameScopes, matchEval:host:evalArgs_rel, matchEval:host:evalArgs_rel_output, matchEval:host:evalRecFields_rel, matchEval:host:evalRecFields_rel_output. Proof completed.
< Add_Ext_Size matchEval:host:evalExpr, matchEval:host:evalArgs, matchEval:host:evalRecFields, matchEval:host:evalStmt. Proof completed.
< Add_Proj_Rel matchEval:host:evalExpr, matchEval:host:evalArgs, matchEval:host:evalRecFields, matchEval:host:evalStmt. Proof completed.
< Prove matchEval:host:evalExpr_rel_exists_ES, matchEval:host:evalStmt_newNameScopes_exists_ES, matchEval:host:evalArgs_rel_exists_ES, matchEval:host:evalRecFields_rel_exists_ES. Proof completed.
< Prove matchEval:host:evalExpr_scopes_same, matchEval:host:evalStmt_scopes_same, matchEval:host:evalStmt_scopes_same_ctx, matchEval:host:evalArgs_scopes_same, matchEval:host:evalRecFields_scopes_same. Proof completed.
< Prove matchEval:host:evalExpr_scopes_same_exists, matchEval:host:evalStmt_scopes_same_exists, matchEval:host:evalArgs_scopes_same_exists, matchEval:host:evalRecFields_scopes_same_exists. Proof completed.
< Prove_Constraint matchEval:host:proj_matchInt. Proof completed.
< Prove_Constraint matchEval:host:proj_matchTrue. Proof completed.
< Prove_Constraint matchEval:host:proj_matchFalse. Proof completed.
< Prove_Constraint matchEval:host:proj_matchString. Proof completed.
< Prove_Constraint matchEval:host:proj_matchRec. Proof completed.
< Add_Proj_Rel matchEval:host:matchInt. Proof completed.
< Prove_Ext_Ind matchEval:host:matchInt. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Add_Proj_Rel matchEval:host:matchTrue. Proof completed.
< Prove_Ext_Ind matchEval:host:matchTrue. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Add_Proj_Rel matchEval:host:matchFalse. Proof completed.
< Prove_Ext_Ind matchEval:host:matchFalse. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Add_Proj_Rel matchEval:host:matchRec. Proof completed.
< Prove_Ext_Ind matchEval:host:matchRec. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Add_Proj_Rel matchEval:host:matchString. Proof completed.
< Prove_Ext_Ind matchEval:host:matchString. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Prove matchEval:host:projedVal_is. Proof completed.
< Prove matchEval:host:projedVal_matchInt. Proof completed.
< Prove matchEval:host:projedVal_matchString. Proof completed.
< Prove matchEval:host:projedVal_matchTrue. Proof completed.
< Prove matchEval:host:projedVal_matchFalse. Proof completed.
< Prove matchEval:host:projedVal_matchRec. Proof completed.
< Prove_Constraint matchEval:host:matchInt_proj. Proof completed.
< Prove_Constraint matchEval:host:matchTrue_proj. Proof completed.
< Prove_Constraint matchEval:host:matchFalse_proj. Proof completed.
< Prove_Constraint matchEval:host:matchString_proj. Proof completed.
< Prove_Constraint matchEval:host:matchRec_proj. Proof completed.
< Prove matchEval:host:matchInt_projedVal. Proof completed.
< Prove matchEval:host:matchTrue_projedVal. Proof completed.
< Prove matchEval:host:matchFalse_projedVal. Proof completed.
< Prove matchEval:host:matchString_projedVal. Proof completed.
< Prove matchEval:host:matchRec_projedVal. Proof completed.
< Prove_Constraint matchEval:host:proj_evalExpr_forward. Proof completed.
< Prove_Constraint matchEval:host:proj_evalStmt_forward. Proof completed.
< Prove_Ext_Ind matchEval:host:evalExpr, matchEval:host:evalArgs, matchEval:host:evalRecFields, matchEval:host:evalStmt. Proof completed.
< Prove matchEval:host:paramName_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_paramName_forward. Proof completed.
< Prove_Constraint matchEval:host:proj_paramName_back. Proof completed.
< Prove matchEval:host:getFunEvalInfo_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_getFunEvalInfo_forward. Proof completed.
< Prove_Constraint matchEval:host:proj_getFunEvalInfo_back. Proof completed.
< Prove matchEval:host:evalProgram_unique. Proof completed.
< Prove_Constraint matchEval:host:proj_evalProgram_forward. Proof completed.
< Prove_Constraint matchEval:host:proj_evalProgram_back. Proof completed.
< Prove matchEval:host:matchRec_typePres. Proof completed.
< Prove matchEval:host:evalExpr_typePres, matchEval:host:evalStmt_typePres, matchEval:host:evalArgs_typePres, matchEval:host:evalRecFields_typePres. Proof completed.
< Prove matchEval:host:paramTy_paramName_same. Proof completed.
< Prove matchEval:host:funOK_getFunEvalInfo_related. Proof completed.
< Prove matchEval:host:evalExpr_output_forms, matchEval:host:evalStmt_output_forms, matchEval:host:evalArgs_output_forms, matchEval:host:evalRecFields_output_forms. Proof completed.
< Prove matchEval:host:evalProgram_output_forms. Proof completed.
< Prove matchEval:host:paramName_exists. Proof completed.
< Prove matchEval:host:getFunEvalInfo_exists. Proof completed.
< Theorem join_is : forall L J, is_list (is_list is_string) L -> join L J -> is_list is_string J. ============================ forall L J, is_list (is_list is_string) L -> join L J -> is_list is_string J
< induction on 2. IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J ============================ forall L J, is_list (is_list is_string) L -> join L J @ -> is_list is_string J
< intros Is J. Variables: L J IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J Is : is_list (is_list is_string) L J : join L J @ ============================ is_list is_string J
< J: case J. Subgoal 1: IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J Is : is_list (is_list is_string) [] ============================ is_list is_string []
< search. Subgoal 2: Variables: J Rest SRest S IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J Is : is_list (is_list is_string) (S::SRest) J : join SRest Rest * J1 : S ++ Rest = J ============================ is_list is_string J
< case Is. Subgoal 2: Variables: J Rest SRest S IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J J : join SRest Rest * J1 : S ++ Rest = J H1 : is_list is_string S H2 : is_list (is_list is_string) SRest ============================ is_list is_string J
< apply IH to _ J. Subgoal 2: Variables: J Rest SRest S IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J J : join SRest Rest * J1 : S ++ Rest = J H1 : is_list is_string S H2 : is_list (is_list is_string) SRest H3 : is_list is_string Rest ============================ is_list is_string J
< apply append_list_string_is to _ _ J1. Subgoal 2: Variables: J Rest SRest S IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J J : join SRest Rest * J1 : S ++ Rest = J H1 : is_list is_string S H2 : is_list (is_list is_string) SRest H3 : is_list is_string Rest H4 : is_list is_string J ============================ is_list is_string J
< search. Proof completed.
< Extensible_Theorem transE_is : forall E T, IsE : is_expr E -> Trans : transE E T -> is_expr T on Trans as IH_Ealso transA_is : forall A T, IsA : is_args A -> Trans : transA A T -> is_args T on Trans as IH_A, transRF_is : forall RF T, IsRF : is_recFieldExprs RF -> Trans : transRF RF T -> is_recFieldExprs T on Trans as IH_RF. Subgoal 1.1: Variables: I IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (num I) Trans : transE (num I) (num I) @ ============================ is_expr (num I)
< search. Subgoal 1.2: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (plus E1 E2) Trans : transE (plus E1 E2) (plus E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (plus E11 E21)
< case IsE. Subgoal 1.2: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (plus E1 E2) (plus E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (plus E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.2: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (plus E1 E2) (plus E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (plus E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.2: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (plus E1 E2) (plus E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (plus E11 E21)
< search. Subgoal 1.3: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (minus E1 E2) Trans : transE (minus E1 E2) (minus E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (minus E11 E21)
< case IsE. Subgoal 1.3: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (minus E1 E2) (minus E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (minus E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.3: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (minus E1 E2) (minus E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (minus E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.3: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (minus E1 E2) (minus E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (minus E11 E21)
< search. Subgoal 1.4: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (mult E1 E2) Trans : transE (mult E1 E2) (mult E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (mult E11 E21)
< case IsE. Subgoal 1.4: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (mult E1 E2) (mult E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (mult E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.4: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (mult E1 E2) (mult E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (mult E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.4: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (mult E1 E2) (mult E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (mult E11 E21)
< search. Subgoal 1.5: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (div E1 E2) Trans : transE (div E1 E2) (div E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (div E11 E21)
< case IsE. Subgoal 1.5: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (div E1 E2) (div E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (div E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.5: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (div E1 E2) (div E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (div E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.5: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (div E1 E2) (div E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (div E11 E21)
< search. Subgoal 1.6: IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr true Trans : transE true true @ ============================ is_expr true
< search. Subgoal 1.7: IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr false Trans : transE false false @ ============================ is_expr false
< search. Subgoal 1.8: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (and E1 E2) Trans : transE (and E1 E2) (and E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (and E11 E21)
< case IsE. Subgoal 1.8: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (and E1 E2) (and E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (and E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.8: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (and E1 E2) (and E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (and E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.8: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (and E1 E2) (and E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (and E11 E21)
< search. Subgoal 1.9: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (or E1 E2) Trans : transE (or E1 E2) (or E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (or E11 E21)
< case IsE. Subgoal 1.9: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (or E1 E2) (or E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (or E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.9: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (or E1 E2) (or E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (or E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.9: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (or E1 E2) (or E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (or E11 E21)
< search. Subgoal 1.10: Variables: E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (not E1) Trans : transE (not E1) (not E2) @ Trans1 : transE E1 E2 * ============================ is_expr (not E2)
< case IsE. Subgoal 1.10: Variables: E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (not E1) (not E2) @ Trans1 : transE E1 E2 * H1 : is_expr E1 ============================ is_expr (not E2)
< apply IH_E to _ Trans1. Subgoal 1.10: Variables: E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (not E1) (not E2) @ Trans1 : transE E1 E2 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (not E2)
< search. Subgoal 1.11: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (greater E1 E2) Trans : transE (greater E1 E2) (greater E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (greater E11 E21)
< case IsE. Subgoal 1.11: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (greater E1 E2) (greater E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (greater E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.11: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (greater E1 E2) (greater E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (greater E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.11: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (greater E1 E2) (greater E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (greater E11 E21)
< search. Subgoal 1.12: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (eq E1 E2) Trans : transE (eq E1 E2) (eq E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (eq E11 E21)
< case IsE. Subgoal 1.12: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (eq E1 E2) (eq E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (eq E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.12: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (eq E1 E2) (eq E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (eq E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.12: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (eq E1 E2) (eq E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (eq E11 E21)
< search. Subgoal 1.13: Variables: S IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (stringLit S) Trans : transE (stringLit S) (stringLit S) @ ============================ is_expr (stringLit S)
< search. Subgoal 1.14: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (appString E1 E2) Trans : transE (appString E1 E2) (appString E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * ============================ is_expr (appString E11 E21)
< case IsE. Subgoal 1.14: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (appString E1 E2) (appString E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (appString E11 E21)
< apply IH_E to _ Trans1. Subgoal 1.14: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (appString E1 E2) (appString E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (appString E11 E21)
< apply IH_E to _ Trans2. Subgoal 1.14: Variables: E21 E11 E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (appString E1 E2) (appString E11 E21) @ Trans1 : transE E1 E11 * Trans2 : transE E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (appString E11 E21)
< search. Subgoal 1.15: Variables: X IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (name X) Trans : transE (name X) (name X) @ ============================ is_expr (name X)
< search. Subgoal 1.16: Variables: A1 F A IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (call F A) Trans : transE (call F A) (call F A1) @ Trans1 : transA A A1 * ============================ is_expr (call F A1)
< case IsE. Subgoal 1.16: Variables: A1 F A IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (call F A) (call F A1) @ Trans1 : transA A A1 * H1 : is_string F H2 : is_args A ============================ is_expr (call F A1)
< apply IH_A to _ Trans1. Subgoal 1.16: Variables: A1 F A IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (call F A) (call F A1) @ Trans1 : transA A A1 * H1 : is_string F H2 : is_args A H3 : is_args A1 ============================ is_expr (call F A1)
< search. Subgoal 1.17: Variables: RF1 RF IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (recBuild RF) Trans : transE (recBuild RF) (recBuild RF1) @ Trans1 : transRF RF RF1 * ============================ is_expr (recBuild RF1)
< case IsE. Subgoal 1.17: Variables: RF1 RF IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (recBuild RF) (recBuild RF1) @ Trans1 : transRF RF RF1 * H1 : is_recFieldExprs RF ============================ is_expr (recBuild RF1)
< apply IH_RF to _ Trans1. Subgoal 1.17: Variables: RF1 RF IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (recBuild RF) (recBuild RF1) @ Trans1 : transRF RF RF1 * H1 : is_recFieldExprs RF H2 : is_recFieldExprs RF1 ============================ is_expr (recBuild RF1)
< search. Subgoal 1.18: Variables: F E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (recFieldAccess E1 F) Trans : transE (recFieldAccess E1 F) (recFieldAccess E2 F) @ Trans1 : transE E1 E2 * ============================ is_expr (recFieldAccess E2 F)
< case IsE. Subgoal 1.18: Variables: F E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (recFieldAccess E1 F) (recFieldAccess E2 F) @ Trans1 : transE E1 E2 * H1 : is_expr E1 H2 : is_string F ============================ is_expr (recFieldAccess E2 F)
< apply IH_E to _ Trans1. Subgoal 1.18: Variables: F E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (recFieldAccess E1 F) (recFieldAccess E2 F) @ Trans1 : transE E1 E2 * H1 : is_expr E1 H2 : is_string F H3 : is_expr E2 ============================ is_expr (recFieldAccess E2 F)
< search. Subgoal 1.19: Variables: Ty E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr (errorExpr E1 Ty) Trans : transE (errorExpr E1 Ty) (errorExpr E2 Ty) @ Trans1 : transE E1 E2 * ============================ is_expr (errorExpr E2 Ty)
< case IsE. Subgoal 1.19: Variables: Ty E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (errorExpr E1 Ty) (errorExpr E2 Ty) @ Trans1 : transE E1 E2 * H1 : is_expr E1 H2 : is_typ Ty ============================ is_expr (errorExpr E2 Ty)
< apply IH_E to _ Trans1. Subgoal 1.19: Variables: Ty E2 E1 IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transE (errorExpr E1 Ty) (errorExpr E2 Ty) @ Trans1 : transE E1 E2 * H1 : is_expr E1 H2 : is_typ Ty H3 : is_expr E2 ============================ is_expr (errorExpr E2 Ty)
< search. Subgoal 1.20: Variables: T E_P IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr <unknown I expr> Trans : transE <unknown I expr> T @ Trans1 : |{expr}- <unknown I expr> ~~> E_P Trans2 : transE E_P T * ============================ is_expr T
< apply proj_expr_is to Trans1 _. Subgoal 1.20: Variables: T E_P IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr <unknown I expr> Trans : transE <unknown I expr> T @ Trans1 : |{expr}- <unknown I expr> ~~> E_P Trans2 : transE E_P T * H1 : is_expr E_P ============================ is_expr T
< apply IH_E to _ Trans2. Subgoal 1.20: Variables: T E_P IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsE : is_expr <unknown I expr> Trans : transE <unknown I expr> T @ Trans1 : |{expr}- <unknown I expr> ~~> E_P Trans2 : transE E_P T * H1 : is_expr E_P H2 : is_expr T ============================ is_expr T
< search. Subgoal 2: Variables: A T IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsA : is_args A Trans : transA A T @ ============================ is_args T
< Trans: case Trans (keep). Subgoal 2.1: IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsA : is_args nilArgs Trans : transA nilArgs nilArgs @ ============================ is_args nilArgs
< search. Subgoal 2.2: Variables: A2 E1 A1 E IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsA : is_args (consArgs E A1) Trans : transA (consArgs E A1) (consArgs E1 A2) @ Trans1 : transE E E1 * Trans2 : transA A1 A2 * ============================ is_args (consArgs E1 A2)
< case IsA. Subgoal 2.2: Variables: A2 E1 A1 E IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transA (consArgs E A1) (consArgs E1 A2) @ Trans1 : transE E E1 * Trans2 : transA A1 A2 * H1 : is_expr E H2 : is_args A1 ============================ is_args (consArgs E1 A2)
< apply IH_E to _ Trans1. Subgoal 2.2: Variables: A2 E1 A1 E IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transA (consArgs E A1) (consArgs E1 A2) @ Trans1 : transE E E1 * Trans2 : transA A1 A2 * H1 : is_expr E H2 : is_args A1 H3 : is_expr E1 ============================ is_args (consArgs E1 A2)
< apply IH_A to _ Trans2. Subgoal 2.2: Variables: A2 E1 A1 E IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transA (consArgs E A1) (consArgs E1 A2) @ Trans1 : transE E E1 * Trans2 : transA A1 A2 * H1 : is_expr E H2 : is_args A1 H3 : is_expr E1 H4 : is_args A2 ============================ is_args (consArgs E1 A2)
< search. Subgoal 3: Variables: RF T IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsRF : is_recFieldExprs RF Trans : transRF RF T @ ============================ is_recFieldExprs T
< Trans: case Trans (keep). Subgoal 3.1: IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsRF : is_recFieldExprs nilRecFieldExprs Trans : transRF nilRecFieldExprs nilRecFieldExprs @ ============================ is_recFieldExprs nilRecFieldExprs
< search. Subgoal 3.2: Variables: RF2 E1 F RF1 E IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T IsRF : is_recFieldExprs (consRecFieldExprs F E RF1) Trans : transRF (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @ Trans1 : transE E E1 * Trans2 : transRF RF1 RF2 * ============================ is_recFieldExprs (consRecFieldExprs F E1 RF2)
< case IsRF. Subgoal 3.2: Variables: RF2 E1 F RF1 E IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transRF (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @ Trans1 : transE E E1 * Trans2 : transRF RF1 RF2 * H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 ============================ is_recFieldExprs (consRecFieldExprs F E1 RF2)
< apply IH_E to _ Trans1. Subgoal 3.2: Variables: RF2 E1 F RF1 E IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transRF (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @ Trans1 : transE E E1 * Trans2 : transRF RF1 RF2 * H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 H4 : is_expr E1 ============================ is_recFieldExprs (consRecFieldExprs F E1 RF2)
< apply IH_RF to _ Trans2. Subgoal 3.2: Variables: RF2 E1 F RF1 E IH_E : forall E T, is_expr E -> transE E T * -> is_expr T IH_A : forall A T, is_args A -> transA A T * -> is_args T IH_RF : forall RF T, is_recFieldExprs RF -> transRF RF T * -> is_recFieldExprs T Trans : transRF (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @ Trans1 : transE E E1 * Trans2 : transRF RF1 RF2 * H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 H4 : is_expr E1 H5 : is_recFieldExprs RF2 ============================ is_recFieldExprs (consRecFieldExprs F E1 RF2)
< search. Proof completed.
< Extensible_Theorem transS_is : forall Names S T Names', IsS : is_stmt S -> IsNames : is_list (is_list is_string) Names -> Trans : transS Names S T Names' -> is_stmt T on Trans as IH_S, transS_isNames : forall Names S T Names', IsS : is_stmt S -> IsNames : is_list (is_list is_string) Names -> Trans : transS Names S T Names' -> is_list (is_list is_string) Names' on Trans as IH_C. Subgoal 1.1: Variables: Names' IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt noop IsNames : is_list (is_list is_string) Names' Trans : transS Names' noop noop Names' @ ============================ is_stmt noop
< search. Subgoal 1.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (seq S1 S2) IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * ============================ is_stmt (seq S11 S21)
< case IsS. Subgoal 1.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 ============================ is_stmt (seq S11 S21)
< apply IH_S to _ _ Trans1. Subgoal 1.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_stmt S11 ============================ is_stmt (seq S11 S21)
< apply IH_C to _ _ Trans1. Subgoal 1.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 ============================ is_stmt (seq S11 S21)
< apply IH_S to _ _ Trans2. Subgoal 1.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_stmt S21 ============================ is_stmt (seq S11 S21)
< search. Subgoal 1.3: Variables: Names1 Scope X E1 Ty E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (declare Ty X E) IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE E E1 ============================ is_stmt (declare Ty X E1)
< case IsS. Subgoal 1.3: Variables: Names1 Scope X E1 Ty E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE E E1 H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ is_stmt (declare Ty X E1)
< apply transE_is to _ Trans1. Subgoal 1.3: Variables: Names1 Scope X E1 Ty E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE E E1 H1 : is_typ Ty H2 : is_string X H3 : is_expr E H4 : is_expr E1 ============================ is_stmt (declare Ty X E1)
< search. Subgoal 1.4: Variables: Names' E1 X E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (assign X E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @ Trans1 : transE E E1 ============================ is_stmt (assign X E1)
< case IsS. Subgoal 1.4: Variables: Names' E1 X E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @ Trans1 : transE E E1 H1 : is_string X H2 : is_expr E ============================ is_stmt (assign X E1)
< apply transE_is to _ Trans1. Subgoal 1.4: Variables: Names' E1 X E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @ Trans1 : transE E E1 H1 : is_string X H2 : is_expr E H3 : is_expr E1 ============================ is_stmt (assign X E1)
< search. Subgoal 1.5: Variables: Names' E1 Fs Rec E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (recUpdate Rec Fs E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @ Trans1 : transE E E1 ============================ is_stmt (recUpdate Rec Fs E1)
< case IsS. Subgoal 1.5: Variables: Names' E1 Fs Rec E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @ Trans1 : transE E E1 H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E ============================ is_stmt (recUpdate Rec Fs E1)
< apply transE_is to _ Trans1. Subgoal 1.5: Variables: Names' E1 Fs Rec E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @ Trans1 : transE E E1 H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E H4 : is_expr E1 ============================ is_stmt (recUpdate Rec Fs E1)
< search. Subgoal 1.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (ifThenElse Cond Th El) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< case IsS. Subgoal 1.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< apply transE_is to _ Trans1. Subgoal 1.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El H4 : is_expr Cond1 ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< apply IH_S to _ _ Trans2. Subgoal 1.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El H4 : is_expr Cond1 H5 : is_stmt Th1 ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< apply IH_S to _ _ Trans3. Subgoal 1.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El H4 : is_expr Cond1 H5 : is_stmt Th1 H6 : is_stmt El1 ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< search. Subgoal 1.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (while Cond Body) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Body Body1 Names2 * ============================ is_stmt (while Cond1 Body1)
< case IsS. Subgoal 1.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Body Body1 Names2 * H1 : is_expr Cond H2 : is_stmt Body ============================ is_stmt (while Cond1 Body1)
< apply transE_is to _ Trans1. Subgoal 1.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Body Body1 Names2 * H1 : is_expr Cond H2 : is_stmt Body H3 : is_expr Cond1 ============================ is_stmt (while Cond1 Body1)
< apply IH_S to _ _ Trans2. Subgoal 1.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Body Body1 Names2 * H1 : is_expr Cond H2 : is_stmt Body H3 : is_expr Cond1 H4 : is_stmt Body1 ============================ is_stmt (while Cond1 Body1)
< search. Subgoal 1.8: Variables: Names' Names2 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (scopeStmt S1) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @ Trans1 : transS ([]::Names') S1 S2 Names2 * ============================ is_stmt (scopeStmt S2)
< case IsS. Subgoal 1.8: Variables: Names' Names2 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @ Trans1 : transS ([]::Names') S1 S2 Names2 * H1 : is_stmt S1 ============================ is_stmt (scopeStmt S2)
< apply IH_S to _ _ Trans1. Subgoal 1.8: Variables: Names' Names2 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @ Trans1 : transS ([]::Names') S1 S2 Names2 * H1 : is_stmt S1 H2 : is_stmt S2 ============================ is_stmt (scopeStmt S2)
< search. Subgoal 1.9: Variables: Names' E1 E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (printVal E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @ Trans1 : transE E E1 ============================ is_stmt (printVal E1)
< case IsS. Subgoal 1.9: Variables: Names' E1 E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @ Trans1 : transE E E1 H1 : is_expr E ============================ is_stmt (printVal E1)
< apply transE_is to _ Trans1. Subgoal 1.9: Variables: Names' E1 E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @ Trans1 : transE E E1 H1 : is_expr E H2 : is_expr E1 ============================ is_stmt (printVal E1)
< search. Subgoal 1.10: Variables: Names T Names' N S_P IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * ============================ is_stmt T
< apply join_is to _ Trans1. Subgoal 1.10: Variables: Names T Names' N S_P IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N ============================ is_stmt T
< apply proj_stmt_is to Trans2 _ _. Subgoal 1.10: Variables: Names T Names' N S_P IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N H2 : is_stmt S_P ============================ is_stmt T
< apply IH_S to _ _ Trans3. Subgoal 1.10: Variables: Names T Names' N S_P IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N H2 : is_stmt S_P H3 : is_stmt T ============================ is_stmt T
< search. Subgoal 2.1: Variables: Names' IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt noop IsNames : is_list (is_list is_string) Names' Trans : transS Names' noop noop Names' @ ============================ is_list (is_list is_string) Names'
< search. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (seq S1 S2) IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * ============================ is_list (is_list is_string) Names'
< case IsS. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 ============================ is_list (is_list is_string) Names'
< apply IH_C to _ _ Trans1. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_list (is_list is_string) Names3 ============================ is_list (is_list is_string) Names'
< apply IH_C to _ _ Trans2. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_list (is_list is_string) Names3 H4 : is_list (is_list is_string) Names' ============================ is_list (is_list is_string) Names'
< search. Subgoal 2.3: Variables: Names1 Scope X E1 Ty E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (declare Ty X E) IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE E E1 ============================ is_list (is_list is_string) ((X::Scope)::Names1)
< case IsS. Subgoal 2.3: Variables: Names1 Scope X E1 Ty E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE E E1 H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ is_list (is_list is_string) ((X::Scope)::Names1)
< case IsNames. Subgoal 2.3: Variables: Names1 Scope X E1 Ty E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE E E1 H1 : is_typ Ty H2 : is_string X H3 : is_expr E H4 : is_list is_string Scope H5 : is_list (is_list is_string) Names1 ============================ is_list (is_list is_string) ((X::Scope)::Names1)
< search. Subgoal 2.4: Variables: Names' E1 X E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (assign X E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @ Trans1 : transE E E1 ============================ is_list (is_list is_string) Names'
< search. Subgoal 2.5: Variables: Names' E1 Fs Rec E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (recUpdate Rec Fs E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @ Trans1 : transE E E1 ============================ is_list (is_list is_string) Names'
< search. Subgoal 2.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (ifThenElse Cond Th El) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * ============================ is_list (is_list is_string) Names'
< search. Subgoal 2.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (while Cond Body) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::Names') Body Body1 Names2 * ============================ is_list (is_list is_string) Names'
< search. Subgoal 2.8: Variables: Names' Names2 S2 S1 IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (scopeStmt S1) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @ Trans1 : transS ([]::Names') S1 S2 Names2 * ============================ is_list (is_list is_string) Names'
< search. Subgoal 2.9: Variables: Names' E1 E IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt (printVal E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @ Trans1 : transE E E1 ============================ is_list (is_list is_string) Names'
< search. Subgoal 2.10: Variables: Names T Names' N S_P IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * ============================ is_list (is_list is_string) Names'
< apply join_is to _ Trans1. Subgoal 2.10: Variables: Names T Names' N S_P IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N ============================ is_list (is_list is_string) Names'
< apply proj_stmt_is to Trans2 _ _. Subgoal 2.10: Variables: Names T Names' N S_P IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N H2 : is_stmt S_P ============================ is_list (is_list is_string) Names'
< apply IH_C to _ _ Trans3. Subgoal 2.10: Variables: Names T Names' N S_P IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N H2 : is_stmt S_P H3 : is_list (is_list is_string) Names' ============================ is_list (is_list is_string) Names'
< search. Proof completed.
< Theorem domain_is_tys : forall L D, is_list (is_pair is_string is_typ) L -> domain L D -> is_list is_string D. ============================ forall L D, is_list (is_pair is_string is_typ) L -> domain L D -> is_list is_string D
< induction on 2. IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D ============================ forall L D, is_list (is_pair is_string is_typ) L -> domain L D @ -> is_list is_string D
< intros Is D. Variables: L D IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D Is : is_list (is_pair is_string is_typ) L D : domain L D @ ============================ is_list is_string D
< D: case D. Subgoal 1: IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D Is : is_list (is_pair is_string is_typ) [] ============================ is_list is_string []
< search. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D Is : is_list (is_pair is_string is_typ) ((A, B)::Rest) D : domain Rest DRest * ============================ is_list is_string (A::DRest)
< Is: case Is. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D D : domain Rest DRest * Is : is_pair is_string is_typ (A, B) Is1 : is_list (is_pair is_string is_typ) Rest ============================ is_list is_string (A::DRest)
< case Is. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D D : domain Rest DRest * Is1 : is_list (is_pair is_string is_typ) Rest H1 : is_string A H2 : is_typ B ============================ is_list is_string (A::DRest)
< apply IH to _ D. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D D : domain Rest DRest * Is1 : is_list (is_pair is_string is_typ) Rest H1 : is_string A H2 : is_typ B H3 : is_list is_string DRest ============================ is_list is_string (A::DRest)
< search. Proof completed.
< Extensible_Theorem transF_is : forall F T, IsF : is_fun F -> Trans : transF F T -> is_fun T on Trans. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T IsF : is_fun (fun F1 RetTy RetVar InitVal Params Body) Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< case IsF. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< apply paramTys_is to _ Trans1. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body H7 : is_list (is_pair is_string is_typ) PTys ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< apply domain_is_tys to _ Trans2. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body H7 : is_list (is_pair is_string is_typ) PTys H8 : is_list is_string Names ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< apply transS_is to _ _ Trans3. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body H7 : is_list (is_pair is_string is_typ) PTys H8 : is_list is_string Names H9 : is_stmt Body1 ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< search. Subgoal 2: Variables: T F_P IH : forall F T, is_fun F -> transF F T * -> is_fun T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> T @ Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P T * ============================ is_fun T
< apply proj_fun_is to Trans1 _. Subgoal 2: Variables: T F_P IH : forall F T, is_fun F -> transF F T * -> is_fun T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> T @ Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P T * H1 : is_fun F_P ============================ is_fun T
< apply IH to _ Trans2. Subgoal 2: Variables: T F_P IH : forall F T, is_fun F -> transF F T * -> is_fun T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> T @ Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P T * H1 : is_fun F_P H2 : is_fun T ============================ is_fun T
< search. Proof completed.
< Theorem transFuns_is : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts -> is_list is_fun Ts. ============================ forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts -> is_list is_fun Ts
< induction on 2. IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts ============================ forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts @ -> is_list is_fun Ts
< intros IsFs TF. Variables: Fs Ts IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts IsFs : is_list is_fun Fs TF : transFuns Fs Ts @ ============================ is_list is_fun Ts
< TF: case TF. Subgoal 1: IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts IsFs : is_list is_fun [] ============================ is_list is_fun []
< search. Subgoal 2: Variables: Rest1 F1 Rest F IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts IsFs : is_list is_fun (F::Rest) TF : transF F F1 TF1 : transFuns Rest Rest1 * ============================ is_list is_fun (F1::Rest1)
< case IsFs. Subgoal 2: Variables: Rest1 F1 Rest F IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts TF : transF F F1 TF1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest ============================ is_list is_fun (F1::Rest1)
< apply IH to _ TF1. Subgoal 2: Variables: Rest1 F1 Rest F IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts TF : transF F F1 TF1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest H3 : is_list is_fun Rest1 ============================ is_list is_fun (F1::Rest1)
< apply transF_is to _ TF. Subgoal 2: Variables: Rest1 F1 Rest F IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts TF : transF F F1 TF1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest H3 : is_list is_fun Rest1 H4 : is_fun F1 ============================ is_list is_fun (F1::Rest1)
< search. Proof completed.
< Extensible_Theorem transP_is : forall P T, IsP : is_program P -> Trans : transP P T -> is_program T on Trans. Subgoal 1: Variables: Main1 Funs1 Main Funs IH : forall P T, is_program P -> transP P T * -> is_program T IsP : is_program (program Funs Main) Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 ============================ is_program (program Funs1 Main1)
< case IsP. Subgoal 1: Variables: Main1 Funs1 Main Funs IH : forall P T, is_program P -> transP P T * -> is_program T Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main ============================ is_program (program Funs1 Main1)
< apply transFuns_is to _ Trans1. Subgoal 1: Variables: Main1 Funs1 Main Funs IH : forall P T, is_program P -> transP P T * -> is_program T Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main H3 : is_list is_fun Funs1 ============================ is_program (program Funs1 Main1)
< apply transF_is to _ Trans2. Subgoal 1: Variables: Main1 Funs1 Main Funs IH : forall P T, is_program P -> transP P T * -> is_program T Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 ============================ is_program (program Funs1 Main1)
< search. Subgoal 2: Variables: T P_P IH : forall P T, is_program P -> transP P T * -> is_program T IsP : is_program <unknown I program> Trans : transP <unknown I program> T @ Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P T * ============================ is_program T
< apply proj_program_is to Trans1 _. Subgoal 2: Variables: T P_P IH : forall P T, is_program P -> transP P T * -> is_program T IsP : is_program <unknown I program> Trans : transP <unknown I program> T @ Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P T * H1 : is_program P_P ============================ is_program T
< apply IH to _ Trans2. Subgoal 2: Variables: T P_P IH : forall P T, is_program P -> transP P T * -> is_program T IsP : is_program <unknown I program> Trans : transP <unknown I program> T @ Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P T * H1 : is_program P_P H2 : is_program T ============================ is_program T
< search. Proof completed.
< Extensible_Theorem transS_old_scopes : forall Names Scope S S' Names', IsS : is_stmt S -> IsNames : is_list (is_list is_string) (Scope::Names) -> Trans : transS (Scope::Names) S S' Names' -> exists Scope', Names' = Scope'::Names on Trans. Subgoal 1: Variables: Names Scope IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt noop IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) noop noop (Scope::Names) @ ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 2: Variables: Names Scope Names' Names3 S21 S11 S2 S1 IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (seq S1 S2) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS (Scope::Names) S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * ============================ exists Scope', Names' = Scope'::Names
< case IsS. Subgoal 2: Variables: Names Scope Names' Names3 S21 S11 S2 S1 IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS (Scope::Names) S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 ============================ exists Scope', Names' = Scope'::Names
< apply IH to _ _ Trans1. Subgoal 2: Variables: Names Scope Names' S21 S11 S2 S1 Scope' IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) * Trans2 : transS (Scope'::Names) S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 ============================ exists Scope', Names' = Scope'::Names
< apply transS_isNames to _ _ Trans1. Subgoal 2: Variables: Names Scope Names' S21 S11 S2 S1 Scope' IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) * Trans2 : transS (Scope'::Names) S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_list (is_list is_string) (Scope'::Names) ============================ exists Scope', Names' = Scope'::Names
< apply IH to _ _ Trans2. Subgoal 2: Variables: Names Scope S21 S11 S2 S1 Scope' Scope'1 IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) (Scope'1::Names) @ Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) * Trans2 : transS (Scope'::Names) S2 S21 (Scope'1::Names) * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_list (is_list is_string) (Scope'::Names) ============================ exists Scope', Scope'1::Names = Scope'::Names
< search. Subgoal 3: Variables: Names Scope X E1 Ty E IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (declare Ty X E) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names) @ Trans1 : transE E E1 ============================ exists Scope', (X::Scope)::Names = Scope'::Names
< search. Subgoal 4: Variables: Names Scope E1 X E IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (assign X E) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (assign X E) (assign X E1) (Scope::Names) @ Trans1 : transE E E1 ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 5: Variables: Names Scope E1 Fs Rec E IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (recUpdate Rec Fs E) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (recUpdate Rec Fs E) (recUpdate Rec Fs E1) (Scope::Names) @ Trans1 : transE E E1 ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 6: Variables: Names Scope NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (ifThenElse Cond Th El) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) (Scope::Names) @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::(Scope::Names)) Th Th1 NamesTh * Trans3 : transS ([]::(Scope::Names)) El El1 NamesEl * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 7: Variables: Names Scope Names2 Body1 Cond1 Body Cond IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (while Cond Body) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (while Cond Body) (while Cond1 Body1) (Scope::Names) @ Trans1 : transE Cond Cond1 Trans2 : transS ([]::(Scope::Names)) Body Body1 Names2 * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 8: Variables: Names Scope Names2 S2 S1 IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (scopeStmt S1) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (scopeStmt S1) (scopeStmt S2) (Scope::Names) @ Trans1 : transS ([]::(Scope::Names)) S1 S2 Names2 * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 9: Variables: Names Scope E1 E IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (printVal E) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (printVal E) (printVal E1) (Scope::Names) @ Trans1 : transE E E1 ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 10: Variables: Names Scope S' Names' N S_P IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) <unknown I stmt> S' Names' @ Trans1 : join (Scope::Names) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (Scope::Names) S_P S' Names' * ============================ exists Scope', Names' = Scope'::Names
< apply join_is to _ Trans1. Subgoal 10: Variables: Names Scope S' Names' N S_P IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) <unknown I stmt> S' Names' @ Trans1 : join (Scope::Names) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (Scope::Names) S_P S' Names' * H1 : is_list is_string N ============================ exists Scope', Names' = Scope'::Names
< apply proj_stmt_is to Trans2 _ _. Subgoal 10: Variables: Names Scope S' Names' N S_P IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) <unknown I stmt> S' Names' @ Trans1 : join (Scope::Names) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (Scope::Names) S_P S' Names' * H1 : is_list is_string N H2 : is_stmt S_P ============================ exists Scope', Names' = Scope'::Names
< apply IH to _ _ Trans3. Subgoal 10: Variables: Names Scope S' N S_P Scope' IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) <unknown I stmt> S' (Scope'::Names) @ Trans1 : join (Scope::Names) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (Scope::Names) S_P S' (Scope'::Names) * H1 : is_list is_string N H2 : is_stmt S_P ============================ exists Scope'1, Scope'::Names = Scope'1::Names
< search. Proof completed.
< Theorem mem_names [K, V] : forall (EE : list (list (pair K V))) N X, names EE N -> mem X N -> exists V, mems (X, V) EE. ============================ forall EE N X, names EE N -> mem X N -> exists V, mems (X, V) EE
< induction on 1. IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE ============================ forall EE N X, names EE N @ -> mem X N -> exists V, mems (X, V) EE
< intros Names M. Variables: EE N X IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE Names : names EE N @ M : mem X N ============================ exists V, mems (X, V) EE
< Names: case Names. Subgoal 1: Variables: X IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X [] ============================ exists V, mems (X, V) []
< case M. Subgoal 2: Variables: N X NScope NRest Rest Scope IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N ============================ exists V, mems (X, V) (Scope::Rest)
< Or: apply mem_append to M Names2. Subgoal 2: Variables: N X NScope NRest Rest Scope IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N Or : mem X NScope \/ mem X NRest ============================ exists V, mems (X, V) (Scope::Rest)
< M': case Or. Subgoal 2.1: Variables: N X NScope NRest Rest Scope IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N M' : mem X NScope ============================ exists V, mems (X, V) (Scope::Rest)
< apply mem_domain to Names M'. Subgoal 2.1: Variables: N X NScope NRest Rest Scope B IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N M' : mem X NScope H1 : mem (X, B) Scope ============================ exists V, mems (X, V) (Scope::Rest)
< search. Subgoal 2.2: Variables: N X NScope NRest Rest Scope IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N M' : mem X NRest ============================ exists V, mems (X, V) (Scope::Rest)
< apply IH to Names1 M'. Subgoal 2.2: Variables: N X NScope NRest Rest Scope V IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N M' : mem X NRest H1 : mems (X, V) Rest ============================ exists V, mems (X, V) (Scope::Rest)
< search. Proof completed.
< Theorem mems_names [K, V] : forall EE N (X : K) (V : V), names EE N -> mems (X, V) EE -> mem X N. ============================ forall EE N X V, names EE N -> mems (X, V) EE -> mem X N
< induction on 2. IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N ============================ forall EE N X V, names EE N -> mems (X, V) EE @ -> mem X N
< intros N M. Variables: EE N X V IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N N : names EE N M : mems (X, V) EE @ ============================ mem X N
< M: case M. Subgoal 1: Variables: N X V Rest S IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N N : names (S::Rest) N M : mem (X, V) S ============================ mem X N
< N: case N. Subgoal 1: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mem (X, V) S N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N ============================ mem X N
< MNS: apply domain_mem to M N. Subgoal 1: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mem (X, V) S N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N MNS : mem X NScope ============================ mem X N
< apply mem_append_left to MNS N2. Subgoal 1: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mem (X, V) S N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N MNS : mem X NScope H1 : mem X N ============================ mem X N
< search. Subgoal 2: Variables: N X V Rest S IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N N : names (S::Rest) N M : mems (X, V) Rest * ============================ mem X N
< N: case N. Subgoal 2: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mems (X, V) Rest * N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N ============================ mem X N
< MNR: apply IH to N1 M. Subgoal 2: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mems (X, V) Rest * N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N MNR : mem X NRest ============================ mem X N
< apply mem_append_right to MNR N2. Subgoal 2: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mems (X, V) Rest * N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N MNR : mem X NRest H1 : mem X N ============================ mem X N
< search. Proof completed.
< Theorem mem_join [A] : forall (L : list (list A)) J X, join L J -> mem X J -> mems X L. ============================ forall L J X, join L J -> mem X J -> mems X L
< induction on 1. IH : forall L J X, join L J * -> mem X J -> mems X L ============================ forall L J X, join L J @ -> mem X J -> mems X L
< intros J M. Variables: L J X IH : forall L J X, join L J * -> mem X J -> mems X L J : join L J @ M : mem X J ============================ mems X L
< J: case J. Subgoal 1: Variables: X IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X [] ============================ mems X []
< case M. Subgoal 2: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J ============================ mems X (S::SRest)
< Or: apply mem_append to M J1. Subgoal 2: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J Or : mem X S \/ mem X Rest ============================ mems X (S::SRest)
< M': case Or. Subgoal 2.1: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J M' : mem X S ============================ mems X (S::SRest)
< search. Subgoal 2.2: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J M' : mem X Rest ============================ mems X (S::SRest)
< apply IH to J M'. Subgoal 2.2: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J M' : mem X Rest H1 : mems X SRest ============================ mems X (S::SRest)
< search. Proof completed.
< Theorem mems_join [A] : forall L J (X : A), join L J -> mems X L -> mem X J. ============================ forall L J X, join L J -> mems X L -> mem X J
< induction on 2. IH : forall L J X, join L J -> mems X L * -> mem X J ============================ forall L J X, join L J -> mems X L @ -> mem X J
< intros J M. Variables: L J X IH : forall L J X, join L J -> mems X L * -> mem X J J : join L J M : mems X L @ ============================ mem X J
< M: case M. Subgoal 1: Variables: J X Rest S IH : forall L J X, join L J -> mems X L * -> mem X J J : join (S::Rest) J M : mem X S ============================ mem X J
< J: case J. Subgoal 1: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mem X S J : join Rest Rest1 J1 : S ++ Rest1 = J ============================ mem X J
< apply mem_append_left to M J1. Subgoal 1: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mem X S J : join Rest Rest1 J1 : S ++ Rest1 = J H1 : mem X J ============================ mem X J
< search. Subgoal 2: Variables: J X Rest S IH : forall L J X, join L J -> mems X L * -> mem X J J : join (S::Rest) J M : mems X Rest * ============================ mem X J
< J: case J. Subgoal 2: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mems X Rest * J : join Rest Rest1 J1 : S ++ Rest1 = J ============================ mem X J
< MR: apply IH to J M. Subgoal 2: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mems X Rest * J : join Rest Rest1 J1 : S ++ Rest1 = J MR : mem X Rest1 ============================ mem X J
< apply mem_append_right to MR J1. Subgoal 2: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mems X Rest * J : join Rest Rest1 J1 : S ++ Rest1 = J MR : mem X Rest1 H1 : mem X J ============================ mem X J
< search. Proof completed.
< Define ctx_names : (list (list (pair K I))) -> (list (list K)) -> prop by ctx_names [] []; ctx_names (A::ARest) (B::BRest) := ((forall K I, mem (K, I) A -> mem K B) /\ (forall K, mem K B -> exists I, mem (K, I) A)) /\ ctx_names ARest BRest.
< Theorem ctx_names_add [K, I] : forall A B AS BS (K : K) (I : I), ctx_names (AS::A) (BS::B) -> ctx_names (((K, I)::AS)::A) ((K::BS)::B). ============================ forall A B AS BS K I, ctx_names (AS::A) (BS::B) -> ctx_names (((K, I)::AS)::A) ((K::BS)::B)
< intros CN. Variables: A B AS BS K I CN : ctx_names (AS::A) (BS::B) ============================ ctx_names (((K, I)::AS)::A) ((K::BS)::B)
< CN: case CN. Variables: A B AS BS K I CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B ============================ ctx_names (((K, I)::AS)::A) ((K::BS)::B)
< unfold . Subgoal 1: Variables: A B AS BS K I CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B ============================ forall K1 I1, mem (K1, I1) ((K, I)::AS) -> mem K1 (K::BS)
< intros M. Subgoal 1: Variables: A B AS BS K I K1 I1 CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B M : mem (K1, I1) ((K, I)::AS) ============================ mem K1 (K::BS)
< M: case M. Subgoal 1.1: Variables: A B AS BS K I CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B ============================ mem K (K::BS)
< search. Subgoal 1.2: Variables: A B AS BS K I K1 I1 CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B M : mem (K1, I1) AS ============================ mem K1 (K::BS)
< apply CN to M. Subgoal 1.2: Variables: A B AS BS K I K1 I1 CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B M : mem (K1, I1) AS H1 : mem K1 BS ============================ mem K1 (K::BS)
< search. Subgoal 2: Variables: A B AS BS K I CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B ============================ forall K1, mem K1 (K::BS) -> exists I1, mem (K1, I1) ((K, I)::AS)
< intros M. Subgoal 2: Variables: A B AS BS K I K1 CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B M : mem K1 (K::BS) ============================ exists I1, mem (K1, I1) ((K, I)::AS)
< M: case M. Subgoal 2.1: Variables: A B AS BS K I CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B ============================ exists I1, mem (K, I1) ((K, I)::AS)
< search. Subgoal 2.2: Variables: A B AS BS K I K1 CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B M : mem K1 BS ============================ exists I1, mem (K1, I1) ((K, I)::AS)
< apply CN1 to M. Subgoal 2.2: Variables: A B AS BS K I K1 I1 CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B M : mem K1 BS H1 : mem (K1, I1) AS ============================ exists I1, mem (K1, I1) ((K, I)::AS)
< search. Subgoal 3: Variables: A B AS BS K I CN : forall K I, mem (K, I) AS -> mem K BS CN1 : forall K, mem K BS -> exists I, mem (K, I) AS CN2 : ctx_names A B ============================ ctx_names A B
< search. Proof completed.
< Theorem ctx_names_add_scope [K, I] : forall (A : list (list (pair K I))) B, ctx_names A B -> ctx_names ([]::A) ([]::B). ============================ forall A B, ctx_names A B -> ctx_names ([]::A) ([]::B)
< intros CN. Variables: A B CN : ctx_names A B ============================ ctx_names ([]::A) ([]::B)
< unfold . Subgoal 1: Variables: A B CN : ctx_names A B ============================ forall K I, mem (K, I) [] -> mem K []
< intros M. Subgoal 1: Variables: A B K I CN : ctx_names A B M : mem (K, I) [] ============================ mem K []
< case M. Subgoal 2: Variables: A B CN : ctx_names A B ============================ forall K, mem K [] -> exists I, mem (K, I) []
< intros M. Subgoal 2: Variables: A B K CN : ctx_names A B M : mem K [] ============================ exists I, mem (K, I) []
< case M. Subgoal 3: Variables: A B CN : ctx_names A B ============================ ctx_names A B
< search. Proof completed.
< Theorem ctx_names_lookupScopes [K, I] : forall A B (K : K) (I : I), ctx_names A B -> lookupScopes K A I -> mems K B. ============================ forall A B K I, ctx_names A B -> lookupScopes K A I -> mems K B
< induction on 2. IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B ============================ forall A B K I, ctx_names A B -> lookupScopes K A I @ -> mems K B
< intros CN L. Variables: A B K I IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B CN : ctx_names A B L : lookupScopes K A I @ ============================ mems K B
< L: case L. Subgoal 1: Variables: B K I Rest L IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B CN : ctx_names (L::Rest) B L : lookup L K I ============================ mems K B
< M: apply lookup_mem to L. Subgoal 1: Variables: B K I Rest L IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B CN : ctx_names (L::Rest) B L : lookup L K I M : mem (K, I) L ============================ mems K B
< CN: case CN. Subgoal 1: Variables: K I Rest L BRest B1 IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B L : lookup L K I M : mem (K, I) L CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest ============================ mems K (B1::BRest)
< apply CN to M. Subgoal 1: Variables: K I Rest L BRest B1 IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B L : lookup L K I M : mem (K, I) L CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest H1 : mem K B1 ============================ mems K (B1::BRest)
< search. Subgoal 2: Variables: B K I Rest L IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B CN : ctx_names (L::Rest) B L : no_lookup L K L1 : lookupScopes K Rest I * ============================ mems K B
< CN: case CN. Subgoal 2: Variables: K I Rest L BRest B1 IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B L : no_lookup L K L1 : lookupScopes K Rest I * CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest ============================ mems K (B1::BRest)
< apply IH to CN2 L1. Subgoal 2: Variables: K I Rest L BRest B1 IH : forall A B K I, ctx_names A B -> lookupScopes K A I * -> mems K B L : no_lookup L K L1 : lookupScopes K Rest I * CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest H1 : mems K BRest ============================ mems K (B1::BRest)
< search. Proof completed.
< Theorem ctx_names_replaceScopes : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' -> ctx_names A' B. ============================ forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' -> ctx_names A' B
< induction on 4. IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B ============================ forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' @ -> ctx_names A' B
< intros IsA IsB CN RS. Variables: A B X V A' IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list is_string) B CN : ctx_names A B RS : replaceScopes X V A A' @ ============================ ctx_names A' B
< RS: case RS. Subgoal 1: Variables: B X V I Rest LRemain L IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) B CN : ctx_names (L::Rest) B RS : mem (X, I) L RS1 : remove_all L X LRemain ============================ ctx_names (((X, V)::LRemain)::Rest) B
< CN: case CN. Subgoal 1: Variables: X V I Rest LRemain L BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest ============================ ctx_names (((X, V)::LRemain)::Rest) (B1::BRest)
< unfold . Subgoal 1.1: Variables: X V I Rest LRemain L BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest ============================ forall K I, mem (K, I) ((X, V)::LRemain) -> mem K B1
< intros M. Subgoal 1.1: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem (K, I1) ((X, V)::LRemain) ============================ mem K B1
< M: case M. Subgoal 1.1.1: Variables: X V I Rest LRemain L BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest ============================ mem X B1
< apply CN to RS. Subgoal 1.1.1: Variables: X V I Rest LRemain L BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest H1 : mem X B1 ============================ mem X B1
< search. Subgoal 1.1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem (K, I1) LRemain ============================ mem K B1
< M': apply mem_after_remove_all_before to RS1 M. Subgoal 1.1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem (K, I1) LRemain M' : mem (K, I1) L ============================ mem K B1
< apply CN to M'. Subgoal 1.1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem (K, I1) LRemain M' : mem (K, I1) L H1 : mem K B1 ============================ mem K B1
< search. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest ============================ forall K, mem K B1 -> exists I, mem (K, I) ((X, V)::LRemain)
< intros M. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 K IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 ============================ exists I, mem (K, I) ((X, V)::LRemain)
< M': apply CN1 to M. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L ============================ exists I, mem (K, I) ((X, V)::LRemain)
< case IsA. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest ============================ exists I, mem (K, I) ((X, V)::LRemain)
< IsKP: apply mem_is to _ M'. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest IsKP : is_pair is_string is_value (K, I1) ============================ exists I, mem (K, I) ((X, V)::LRemain)
< IsK: case IsKP. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest IsK : is_string K IsK1 : is_value I1 ============================ exists I, mem (K, I) ((X, V)::LRemain)
< IsXP: apply mem_is to _ RS. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest IsK : is_string K IsK1 : is_value I1 IsXP : is_pair is_string is_value (X, I) ============================ exists I, mem (K, I) ((X, V)::LRemain)
< IsX: case IsXP. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest IsK : is_string K IsK1 : is_value I1 IsX : is_string X IsX1 : is_value I ============================ exists I, mem (K, I) ((X, V)::LRemain)
< Or: apply is_string_eq_or_not to IsK IsX. Subgoal 1.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest IsK : is_string K IsK1 : is_value I1 IsX : is_string X IsX1 : is_value I Or : K = X \/ (K = X -> false) ============================ exists I, mem (K, I) ((X, V)::LRemain)
< E: case Or. Subgoal 1.2.1: Variables: X V I Rest LRemain L BRest B1 I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem X B1 M' : mem (X, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest IsK : is_string X IsK1 : is_value I1 IsX : is_string X IsX1 : is_value I ============================ exists I, mem (X, I) ((X, V)::LRemain)
< search. Subgoal 1.2.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest IsK : is_string K IsK1 : is_value I1 IsX : is_string X IsX1 : is_value I E : K = X -> false ============================ exists I, mem (K, I) ((X, V)::LRemain)
< apply mem_before_remove_all_after to RS1 M' _. Subgoal 1.2.2: Variables: X V I Rest LRemain L BRest B1 K I1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest M : mem K B1 M' : mem (K, I1) L H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest IsK : is_string K IsK1 : is_value I1 IsX : is_string X IsX1 : is_value I E : K = X -> false H3 : mem (K, I1) LRemain ============================ exists I, mem (K, I) ((X, V)::LRemain)
< search. Subgoal 1.3: Variables: X V I Rest LRemain L BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : mem (X, I) L RS1 : remove_all L X LRemain CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest ============================ ctx_names Rest BRest
< search. Subgoal 2: Variables: B X V New L Rest IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) B CN : ctx_names (L::Rest) B RS : no_lookup L X RS1 : replaceScopes X V Rest New * ============================ ctx_names (L::New) B
< CN: case CN. Subgoal 2: Variables: X V New L Rest BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list is_string) (B1::BRest) RS : no_lookup L X RS1 : replaceScopes X V Rest New * CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest ============================ ctx_names (L::New) (B1::BRest)
< case IsA. Subgoal 2: Variables: X V New L Rest BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B IsB : is_list (is_list is_string) (B1::BRest) RS : no_lookup L X RS1 : replaceScopes X V Rest New * CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest ============================ ctx_names (L::New) (B1::BRest)
< case IsB. Subgoal 2: Variables: X V New L Rest BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B RS : no_lookup L X RS1 : replaceScopes X V Rest New * CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest H3 : is_list is_string B1 H4 : is_list (is_list is_string) BRest ============================ ctx_names (L::New) (B1::BRest)
< apply IH to _ _ CN2 RS1. Subgoal 2: Variables: X V New L Rest BRest B1 IH : forall A B X V A', is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list is_string) B -> ctx_names A B -> replaceScopes X V A A' * -> ctx_names A' B RS : no_lookup L X RS1 : replaceScopes X V Rest New * CN : forall K I, mem (K, I) L -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) L CN2 : ctx_names Rest BRest H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest H3 : is_list is_string B1 H4 : is_list (is_list is_string) BRest H5 : ctx_names New BRest ============================ ctx_names (L::New) (B1::BRest)
< search. Proof completed.
< Theorem ctx_names_mems_fwd [K, V] : forall EE N (X : K) (V : V), ctx_names EE N -> mems (X, V) EE -> mems X N. ============================ forall EE N X V, ctx_names EE N -> mems (X, V) EE -> mems X N
< induction on 2. IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N ============================ forall EE N X V, ctx_names EE N -> mems (X, V) EE @ -> mems X N
< intros Ctxs M. Variables: EE N X V IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N Ctxs : ctx_names EE N M : mems (X, V) EE @ ============================ mems X N
< M: case M. Subgoal 1: Variables: N X V Rest S IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N Ctxs : ctx_names (S::Rest) N M : mem (X, V) S ============================ mems X N
< C: case Ctxs. Subgoal 1: Variables: X V Rest S BRest B IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N M : mem (X, V) S C : forall K I, mem (K, I) S -> mem K B C1 : forall K, mem K B -> exists I, mem (K, I) S C2 : ctx_names Rest BRest ============================ mems X (B::BRest)
< apply C to M. Subgoal 1: Variables: X V Rest S BRest B IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N M : mem (X, V) S C : forall K I, mem (K, I) S -> mem K B C1 : forall K, mem K B -> exists I, mem (K, I) S C2 : ctx_names Rest BRest H1 : mem X B ============================ mems X (B::BRest)
< search. Subgoal 2: Variables: N X V Rest S IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N Ctxs : ctx_names (S::Rest) N M : mems (X, V) Rest * ============================ mems X N
< C: case Ctxs. Subgoal 2: Variables: X V Rest S BRest B IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N M : mems (X, V) Rest * C : forall K I, mem (K, I) S -> mem K B C1 : forall K, mem K B -> exists I, mem (K, I) S C2 : ctx_names Rest BRest ============================ mems X (B::BRest)
< apply IH to C2 M. Subgoal 2: Variables: X V Rest S BRest B IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N M : mems (X, V) Rest * C : forall K I, mem (K, I) S -> mem K B C1 : forall K, mem K B -> exists I, mem (K, I) S C2 : ctx_names Rest BRest H1 : mems X BRest ============================ mems X (B::BRest)
< search. Proof completed.
< Theorem ctx_names_mem_back [K, V] : forall EE N (X : K), ctx_names EE N -> mems X N -> exists (V : V), mems (X, V) EE. ============================ forall EE N X, ctx_names EE N -> mems X N -> exists V, mems (X, V) EE
< induction on 2. IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE ============================ forall EE N X, ctx_names EE N -> mems X N @ -> exists V, mems (X, V) EE
< intros Ctxs M. Variables: EE N X IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE Ctxs : ctx_names EE N M : mems X N @ ============================ exists V, mems (X, V) EE
< M: case M. Subgoal 1: Variables: EE X Rest S IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE Ctxs : ctx_names EE (S::Rest) M : mem X S ============================ exists V, mems (X, V) EE
< C: case Ctxs. Subgoal 1: Variables: X Rest S ARest A IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE M : mem X S C : forall K I, mem (K, I) A -> mem K S C1 : forall K, mem K S -> exists I, mem (K, I) A C2 : ctx_names ARest Rest ============================ exists V, mems (X, V) (A::ARest)
< apply C1 to M. Subgoal 1: Variables: X Rest S ARest A I IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE M : mem X S C : forall K I, mem (K, I) A -> mem K S C1 : forall K, mem K S -> exists I, mem (K, I) A C2 : ctx_names ARest Rest H1 : mem (X, I) A ============================ exists V, mems (X, V) (A::ARest)
< search. Subgoal 2: Variables: EE X Rest S IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE Ctxs : ctx_names EE (S::Rest) M : mems X Rest * ============================ exists V, mems (X, V) EE
< C: case Ctxs. Subgoal 2: Variables: X Rest S ARest A IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE M : mems X Rest * C : forall K I, mem (K, I) A -> mem K S C1 : forall K, mem K S -> exists I, mem (K, I) A C2 : ctx_names ARest Rest ============================ exists V, mems (X, V) (A::ARest)
< apply IH to C2 M. Subgoal 2: Variables: X Rest S ARest A V IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE M : mems X Rest * C : forall K I, mem (K, I) A -> mem K S C1 : forall K, mem K S -> exists I, mem (K, I) A C2 : ctx_names ARest Rest H1 : mems (X, V) ARest ============================ exists V, mems (X, V) (A::ARest)
< search. Proof completed.
< Theorem proj_stmt_unique_ctx_names : forall S SA SB Names NA EE NB, is_stmt S -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE -> ctx_names EE Names -> join Names NA -> names EE NB -> NA |{stmt}- S ~~> SA -> NB |{stmt}- S ~~> SB -> SA = SB. ============================ forall S SA SB Names NA EE NB, is_stmt S -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE -> ctx_names EE Names -> join Names NA -> names EE NB -> NA |{stmt}- S ~~> SA -> NB |{stmt}- S ~~> SB -> SA = SB
< intros IsS IsNames IsEE Ctxs J N PrA PrB. Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB ============================ SA = SB
< apply join_is to _ J. Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA ============================ SA = SB
< apply names_is to _ N. Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB ============================ SA = SB
< apply proj_stmt_unique to PrA PrB _ _ _ _ _. Subgoal 1: Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB ============================ forall X, mem X NB -> mem X NA
< intros MB. Subgoal 1: Variables: S SA SB Names NA EE NB X IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB ============================ mem X NA
< MEE: apply mem_names to N MB. Subgoal 1: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE ============================ mem X NA
< MN: apply ctx_names_mems_fwd to Ctxs MEE. Subgoal 1: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE MN : mems X Names ============================ mem X NA
< apply mems_join to J MN. Subgoal 1: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE MN : mems X Names H3 : mem X NA ============================ mem X NA
< search. Subgoal 2: Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB ============================ forall X, mem X NA -> mem X NB
< intros MA. Subgoal 2: Variables: S SA SB Names NA EE NB X IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA ============================ mem X NB
< MN: apply mem_join to J MA. Subgoal 2: Variables: S SA SB Names NA EE NB X IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names ============================ mem X NB
< MEE: apply ctx_names_mem_back to Ctxs MN. Subgoal 2: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names MEE : mems (X, V) EE ============================ mem X NB
< apply mems_names to N MEE. Subgoal 2: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names MEE : mems (X, V) EE H3 : mem X NB ============================ mem X NB
< search. Variables: S SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SB PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB ============================ SB = SB
< search. Proof completed.
< Theorem ctx_names_scopes_same : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N -> scopes_same EE_A EE_B -> ctx_names EE_A N. ============================ forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N -> scopes_same EE_A EE_B -> ctx_names EE_A N
< induction on 3. IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N ============================ forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N @ -> scopes_same EE_A EE_B -> ctx_names EE_A N
< intros IsA IsB CN SS. Variables: N EE_A EE_B IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) EE_A IsB : is_list (is_list (is_pair is_string is_value)) EE_B CN : ctx_names EE_B N @ SS : scopes_same EE_A EE_B ============================ ctx_names EE_A N
< CN: case CN. Subgoal 1: Variables: EE_A IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) EE_A IsB : is_list (is_list (is_pair is_string is_value)) [] SS : scopes_same EE_A [] ============================ ctx_names EE_A []
< case SS. Subgoal 1: IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) [] IsB : is_list (is_list (is_pair is_string is_value)) [] ============================ ctx_names [] []
< search. Subgoal 2: Variables: EE_A BRest B ARest A IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) EE_A IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) SS : scopes_same EE_A (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * ============================ ctx_names EE_A (B::BRest)
< SS: case SS. Subgoal 2: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest ============================ ctx_names (A1::ARest1) (B::BRest)
< unfold . Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest ============================ forall K I, mem (K, I) A1 -> mem K B
< intros MA1. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 ============================ mem K B
< IsA: case IsA. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 ============================ mem K B
< IsP: apply mem_is to _ MA1. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 IsP : is_pair is_string is_value (K, I) ============================ mem K B
< case IsP. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 H1 : is_string K H2 : is_value I ============================ mem K B
< L: apply mem_lookup to IsA MA1. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 H1 : is_string K H2 : is_value I L : lookup A1 K V' ============================ mem K B
< LA: apply SS to L. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 H1 : is_string K H2 : is_value I L : lookup A1 K V' LA : lookup A K V' ============================ mem K B
< apply lookup_mem to LA. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 H1 : is_string K H2 : is_value I L : lookup A1 K V' LA : lookup A K V' H3 : mem (K, V') A ============================ mem K B
< backchain CN. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest ============================ forall K, mem K B -> exists I, mem (K, I) A1
< intros MB. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B ============================ exists I, mem (K, I) A1
< MA: apply CN1 to MB. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A ============================ exists I, mem (K, I) A1
< IsB: case IsB. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest ============================ exists I, mem (K, I) A1
< IsP: apply mem_is to _ MA. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest IsP : is_pair is_string is_value (K, I) ============================ exists I, mem (K, I) A1
< case IsP. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest H1 : is_string K H2 : is_value I ============================ exists I, mem (K, I) A1
< L: apply mem_lookup to _ MA. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest H1 : is_string K H2 : is_value I L : lookup A K V' ============================ exists I, mem (K, I) A1
< L': apply SS1 to L. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest H1 : is_string K H2 : is_value I L : lookup A K V' L' : lookup A1 K V' ============================ exists I, mem (K, I) A1
< apply lookup_mem to L'. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest H1 : is_string K H2 : is_value I L : lookup A K V' L' : lookup A1 K V' H3 : mem (K, V') A1 ============================ exists I, mem (K, I) A1
< search. Subgoal 2.3: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest ============================ ctx_names ARest1 BRest
< case IsA. Subgoal 2.3: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest H1 : is_list (is_pair is_string is_value) A1 H2 : is_list (is_list (is_pair is_string is_value)) ARest1 ============================ ctx_names ARest1 BRest
< case IsB. Subgoal 2.3: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest H1 : is_list (is_pair is_string is_value) A1 H2 : is_list (is_list (is_pair is_string is_value)) ARest1 H3 : is_list (is_pair is_string is_value) A H4 : is_list (is_list (is_pair is_string is_value)) ARest ============================ ctx_names ARest1 BRest
< apply IH to _ _ CN2 SS2. Subgoal 2.3: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest H1 : is_list (is_pair is_string is_value) A1 H2 : is_list (is_list (is_pair is_string is_value)) ARest1 H3 : is_list (is_pair is_string is_value) A H4 : is_list (is_list (is_pair is_string is_value)) ARest H5 : ctx_names ARest1 BRest ============================ ctx_names ARest1 BRest
< search. Proof completed.
< Extensible_Theorem evalStmt_trans_ctx_names : forall Names S T Names' FE Scope EE EE' O, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsNames : is_list (is_list is_string) Names -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> Ev : evalStmt FE (Scope::EE) S EE' O -> ctx_names EE' Names' on Ev. Subgoal 1: Variables: Names S T Names' FE Scope EE EE' O IsS : is_stmt S IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names S T Names' Ev : evalStmt FE (Scope::EE) S EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
< search. Subgoal 2.1: Variables: Names T Names' FE Scope EE IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names noop T Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ ctx_names (Scope::EE) Names'
< case Trans. Subgoal 2.1: Variables: Names' FE Scope EE IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ ctx_names (Scope::EE) Names'
< search. Subgoal 2.2: Variables: Names T Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 2.2: Variables: Names T Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 2.2: Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' ============================ ctx_names EE' Names'
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 2.2: Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names'
< apply transS_isNames to _ _ Trans. Subgoal 2.2: Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_list (is_list is_string) Names3 ============================ ctx_names EE' Names'
< C: apply IH to _ _ _ _ _ Trans Ev1. Subgoal 2.2: Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_list (is_list is_string) Names3 C : ctx_names EE3 Names3 ============================ ctx_names EE' Names'
< case Ctxs (keep). Subgoal 2.2: Variables: Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 BRest B IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B::BRest) Ctxs : ctx_names (Scope::EE) (B::BRest) Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_list (is_list is_string) Names3 C : ctx_names EE3 Names3 H5 : forall K I, mem (K, I) Scope -> mem K B H6 : forall K, mem K B -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans. Subgoal 2.2: Variables: Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 S21 S11 BRest B Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B::BRest) Ctxs : ctx_names (Scope::EE) (B::BRest) Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_list (is_list is_string) (Scope'::BRest) C : ctx_names EE3 (Scope'::BRest) H5 : forall K I, mem (K, I) Scope -> mem K B H6 : forall K, mem K B -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest ============================ ctx_names EE' Names'
< case C (keep). Subgoal 2.2: Variables: Names' FE Scope EE EE' O O2 O3 S2 S1 S21 S11 BRest B Scope' ARest A IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B::BRest) Ctxs : ctx_names (Scope::EE) (B::BRest) Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_list (is_list is_string) (Scope'::BRest) C : ctx_names (A::ARest) (Scope'::BRest) H5 : forall K I, mem (K, I) Scope -> mem K B H6 : forall K, mem K B -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest H8 : forall K I, mem (K, I) A -> mem K Scope' H9 : forall K, mem K Scope' -> exists I, mem (K, I) A H10 : ctx_names ARest BRest ============================ ctx_names EE' Names'
< apply IH to _ _ _ _ _ Trans1 Ev2. Subgoal 2.2: Variables: Names' FE Scope EE EE' O O2 O3 S2 S1 S21 S11 BRest B Scope' ARest A IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B::BRest) Ctxs : ctx_names (Scope::EE) (B::BRest) Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_list (is_list is_string) (Scope'::BRest) C : ctx_names (A::ARest) (Scope'::BRest) H5 : forall K I, mem (K, I) Scope -> mem K B H6 : forall K, mem K B -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest H8 : forall K I, mem (K, I) A -> mem K Scope' H9 : forall K, mem K Scope' -> exists I, mem (K, I) A H10 : ctx_names ARest BRest H11 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 2.3: Variables: Names T Names' FE Scope EE O V X E Ty IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * ============================ ctx_names (((X, V)::Scope)::EE) Names'
< case IsS. Subgoal 2.3: Variables: Names T Names' FE Scope EE O V X E Ty IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ ctx_names (((X, V)::Scope)::EE) Names'
< Trans: case Trans. Subgoal 2.3: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 ============================ ctx_names (((X, V)::Scope)::EE) ((X::Scope1)::Names1)
< C: case Ctxs. Subgoal 2.3: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 ============================ ctx_names (((X, V)::Scope)::EE) ((X::Scope1)::Names1)
< unfold . Subgoal 2.3.1: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 ============================ forall K I, mem (K, I) ((X, V)::Scope) -> mem K (X::Scope1)
< intros M. Subgoal 2.3.1: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K I IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 M : mem (K, I) ((X, V)::Scope) ============================ mem K (X::Scope1)
< M: case M. Subgoal 2.3.1.1: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 ============================ mem X (X::Scope1)
< search. Subgoal 2.3.1.2: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K I IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 M : mem (K, I) Scope ============================ mem K (X::Scope1)
< apply C to M. Subgoal 2.3.1.2: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K I IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 M : mem (K, I) Scope H4 : mem K Scope1 ============================ mem K (X::Scope1)
< search. Subgoal 2.3.2: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 ============================ forall K, mem K (X::Scope1) -> exists I, mem (K, I) ((X, V)::Scope)
< intros M. Subgoal 2.3.2: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 M : mem K (X::Scope1) ============================ exists I, mem (K, I) ((X, V)::Scope)
< M: case M. Subgoal 2.3.2.1: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 ============================ exists I, mem (X, I) ((X, V)::Scope)
< search. Subgoal 2.3.2.2: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 M : mem K Scope1 ============================ exists I, mem (K, I) ((X, V)::Scope)
< apply C1 to M. Subgoal 2.3.2.2: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 K I IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 M : mem K Scope1 H4 : mem (K, I) Scope ============================ exists I, mem (K, I) ((X, V)::Scope)
< search. Subgoal 2.3.3: Variables: FE Scope EE O V X E Ty Names1 Scope1 E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 C : forall K I, mem (K, I) Scope -> mem K Scope1 C1 : forall K, mem K Scope1 -> exists I, mem (K, I) Scope C2 : ctx_names EE Names1 ============================ ctx_names EE Names1
< search. Subgoal 2.4: Variables: Names T Names' FE Scope EE EE' O V E X IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' ============================ ctx_names EE' Names'
< case IsS. Subgoal 2.4: Variables: Names T Names' FE Scope EE EE' O V E X IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 2.4: Variables: Names' FE Scope EE EE' O V E X E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 ============================ ctx_names EE' Names'
< apply ctx_names_replaceScopes to _ _ Ctxs Ev2. Subgoal 2.4: Variables: Names' FE Scope EE EE' O V E X E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 H3 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 2.5: Variables: Names T Names' FE Scope EE EE' O V RV FieldVals NewVals E Fields Rec IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (recUpdate Rec Fields E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' ============================ ctx_names EE' Names'
< case IsS. Subgoal 2.5: Variables: Names T Names' FE Scope EE EE' O V RV FieldVals NewVals E Fields Rec IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 2.5: Variables: Names' FE Scope EE EE' O V RV FieldVals NewVals E Fields Rec E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 ============================ ctx_names EE' Names'
< apply ctx_names_replaceScopes to _ _ Ctxs Ev5. Subgoal 2.5: Variables: Names' FE Scope EE EE' O V RV FieldVals NewVals E Fields Rec E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 H4 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 2.6: Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 2.6: Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 2.6: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ ctx_names EE' Names'
< C+: apply ctx_names_add_scope to Ctxs. Subgoal 2.6: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C+ : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ ctx_names EE' Names'
< C': apply IH to _ _ _ _ _ Trans1 Ev3. Subgoal 2.6: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C' : ctx_names (Scope1::EE') NamesTh ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans1. Subgoal 2.6: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesEl El2 Th2 Cond2 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 (Scope'::Names') Trans2 : transS ([]::Names') El El2 NamesEl C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C' : ctx_names (Scope1::EE') (Scope'::Names') ============================ ctx_names EE' Names'
< case C'. Subgoal 2.6: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesEl El2 Th2 Cond2 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 (Scope'::Names') Trans2 : transS ([]::Names') El El2 NamesEl C+ : ctx_names ([]::(Scope::EE)) ([]::Names') H4 : forall K I, mem (K, I) Scope1 -> mem K Scope' H5 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 H6 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 2.7: Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 2.7: Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 2.7: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ ctx_names EE' Names'
< C+: apply ctx_names_add_scope to Ctxs. Subgoal 2.7: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C+ : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ ctx_names EE' Names'
< C': apply IH to _ _ _ _ _ Trans2 Ev3. Subgoal 2.7: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C' : ctx_names (Scope1::EE') NamesEl ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans2. Subgoal 2.7: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh El2 Th2 Cond2 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 (Scope'::Names') C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C' : ctx_names (Scope1::EE') (Scope'::Names') ============================ ctx_names EE' Names'
< case C'. Subgoal 2.7: Variables: Names' FE Scope EE EE' O V O2 Scope1 O3 El Th Cond NamesTh El2 Th2 Cond2 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 (Scope'::Names') C+ : ctx_names ([]::(Scope::EE)) ([]::Names') H4 : forall K I, mem (K, I) Scope1 -> mem K Scope' H5 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 H6 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 2.8: Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 2.8: Variables: Names T Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body ============================ ctx_names EE' Names'
< Trans: case Trans (keep). Subgoal 2.8: Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 ============================ ctx_names EE' Names'
< C+: apply ctx_names_add_scope to Ctxs. Subgoal 2.8: Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 C+ : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ ctx_names EE' Names'
< C': apply IH to _ _ _ _ _ Trans2 Ev3. Subgoal 2.8: Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C' : ctx_names (Scope1::EE3) Names2 ============================ ctx_names EE' Names'
< C'': case C'. Subgoal 2.8: Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 BRest B IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B::BRest) C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C'' : forall K I, mem (K, I) Scope1 -> mem K B C''1 : forall K, mem K B -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE3 BRest ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans2. Subgoal 2.8: Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'::Names') C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE3 Names' ============================ ctx_names EE' Names'
< IsEE4+: apply evalStmt_isCtx to _ _ _ Ev3. Subgoal 2.8: Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'::Names') C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE3 Names' IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE3) ============================ ctx_names EE' Names'
< case IsEE4+. Subgoal 2.8: Variables: Names' FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'::Names') C+ : ctx_names ([]::(Scope::EE)) ([]::Names') C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE3 Names' H3 : is_list (is_pair is_string is_value) Scope1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names'
< case Ctxs. Subgoal 2.8: Variables: FE Scope EE EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B1::BRest1) Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1)) C+ : ctx_names ([]::(Scope::EE)) ([]::(B1::BRest1)) C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE3 (B1::BRest1) H3 : is_list (is_pair is_string is_value) Scope1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : forall K I, mem (K, I) Scope -> mem K B1 H6 : forall K, mem K B1 -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest1 ============================ ctx_names EE' (B1::BRest1)
< case C''2 (keep). Subgoal 2.8: Variables: FE Scope EE EE' O V O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 ARest A IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B1::BRest1) Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O3 * Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1)) C+ : ctx_names ([]::(Scope::EE)) ([]::(B1::BRest1)) C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A::ARest) (B1::BRest1) H3 : is_list (is_pair is_string is_value) Scope1 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : forall K I, mem (K, I) Scope -> mem K B1 H6 : forall K, mem K B1 -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest1 H8 : forall K I, mem (K, I) A -> mem K B1 H9 : forall K, mem K B1 -> exists I, mem (K, I) A H10 : ctx_names ARest BRest1 ============================ ctx_names EE' (B1::BRest1)
< apply IH to _ _ _ _ _ Trans Ev4. Subgoal 2.8: Variables: FE Scope EE EE' O V O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 ARest A IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B1::BRest1) Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O3 * Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1)) C+ : ctx_names ([]::(Scope::EE)) ([]::(B1::BRest1)) C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A::ARest) (B1::BRest1) H3 : is_list (is_pair is_string is_value) Scope1 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : forall K I, mem (K, I) Scope -> mem K B1 H6 : forall K, mem K B1 -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest1 H8 : forall K I, mem (K, I) A -> mem K B1 H9 : forall K, mem K B1 -> exists I, mem (K, I) A H10 : ctx_names ARest BRest1 H11 : ctx_names EE' (B1::BRest1) ============================ ctx_names EE' (B1::BRest1)
< search. Subgoal 2.9: Variables: Names T Names' FE Scope EE O V Body Cond IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V ============================ ctx_names (Scope::EE) Names'
< case IsS. Subgoal 2.9: Variables: Names T Names' FE Scope EE O V Body Cond IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body ============================ ctx_names (Scope::EE) Names'
< Trans: case Trans. Subgoal 2.9: Variables: Names' FE Scope EE O V Body Cond Names2 Body2 Cond2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 ============================ ctx_names (Scope::EE) Names'
< search. Subgoal 2.10: Variables: Names T Names' FE Scope EE EE' O Scope1 S1 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * ============================ ctx_names EE' Names'
< case IsS. Subgoal 2.10: Variables: Names T Names' FE Scope EE EE' O Scope1 S1 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 Names2 S3 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans. Subgoal 2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 (Scope'::Names') ============================ ctx_names EE' Names'
< apply ctx_names_add_scope to Ctxs. Subgoal 2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 (Scope'::Names') H2 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ ctx_names EE' Names'
< C: apply IH to _ _ _ _ _ Trans Ev1. Subgoal 2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 (Scope'::Names') H2 : ctx_names ([]::(Scope::EE)) ([]::Names') C : ctx_names (Scope1::EE') (Scope'::Names') ============================ ctx_names EE' Names'
< case C. Subgoal 2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 (Scope'::Names') H2 : ctx_names ([]::(Scope::EE)) ([]::Names') H3 : forall K I, mem (K, I) Scope1 -> mem K Scope' H4 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 H5 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 2.11: Variables: Names T Names' FE Scope EE O I O2 E IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O ============================ ctx_names (Scope::EE) Names'
< case IsS. Subgoal 2.11: Variables: Names T Names' FE Scope EE O I O2 E IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E ============================ ctx_names (Scope::EE) Names'
< Trans: case Trans. Subgoal 2.11: Variables: Names' FE Scope EE O I O2 E E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 ============================ ctx_names (Scope::EE) Names'
< search. Subgoal 2.12: Variables: Names T Names' FE Scope EE O O2 E IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O ============================ ctx_names (Scope::EE) Names'
< case IsS. Subgoal 2.12: Variables: Names T Names' FE Scope EE O O2 E IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E ============================ ctx_names (Scope::EE) Names'
< Trans: case Trans. Subgoal 2.12: Variables: Names' FE Scope EE O O2 E E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 ============================ ctx_names (Scope::EE) Names'
< search. Subgoal 2.13: Variables: Names T Names' FE Scope EE O O2 E IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O ============================ ctx_names (Scope::EE) Names'
< case IsS. Subgoal 2.13: Variables: Names T Names' FE Scope EE O O2 E IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E ============================ ctx_names (Scope::EE) Names'
< Trans: case Trans. Subgoal 2.13: Variables: Names' FE Scope EE O O2 E E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 ============================ ctx_names (Scope::EE) Names'
< search. Subgoal 2.14: Variables: Names T Names' FE Scope EE O S1 O2 E IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O ============================ ctx_names (Scope::EE) Names'
< case IsS. Subgoal 2.14: Variables: Names T Names' FE Scope EE O S1 O2 E IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E ============================ ctx_names (Scope::EE) Names'
< Trans: case Trans. Subgoal 2.14: Variables: Names' FE Scope EE O S1 O2 E E2 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 ============================ ctx_names (Scope::EE) Names'
< search. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' ============================ ctx_names EE' Names'
< apply join_is to _ Trans. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string N ============================ ctx_names EE' Names'
< apply proj_stmt_is to Trans1 _ _. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1 IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string N H2 : is_stmt S_P1 ============================ ctx_names EE' Names'
< apply proj_stmt_unique_ctx_names to _ _ _ _ Trans Ev1 Trans1 Ev2. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P ============================ ctx_names EE' Names'
< C: apply IH to _ _ _ _ _ Trans2 Ev3. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' ============================ ctx_names EE' Names'
< SS: apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N EE'' IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE'' O SS1 : scopes_same EE' EE'' ============================ ctx_names EE' Names'
< apply evalStmt_unique to _ _ _ SS Ev3. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE_P O_P SS1 : scopes_same EE' EE_P ============================ ctx_names EE' Names'
< apply evalStmt_isCtx to _ _ _ SS. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P ============================ ctx_names EE' Names'
< apply evalStmt_isCtx to _ _ _ Ev. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ ctx_names EE' Names'
< apply ctx_names_scopes_same to _ _ C SS1. Subgoal 2.15: Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N IH : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Proof completed.
< Define rel_FE : (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) -> (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) -> prop by rel_FE FE FE_T := (forall F RetVar RVVal PNames Body, lookup FE F (RetVar, RVVal, PNames, Body) -> exists Body_T Names, lookup FE_T F (RetVar, RVVal, PNames, Body_T) /\ transS [RetVar::PNames] Body Body_T Names) /\ (forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, RVVal, PNames, Body_T) -> exists Body Names, lookup FE F (RetVar, RVVal, PNames, Body) /\ transS [RetVar::PNames] Body Body_T Names).
< Theorem zip_ctx_names [A, B] : forall A B (Z : list (pair A B)), zip A B Z -> ctx_names [Z] [A]. ============================ forall A B Z, zip A B Z -> ctx_names [Z] [A]
< intros Z. Variables: A B Z Z : zip A B Z ============================ ctx_names [Z] [A]
< unfold . Subgoal 1: Variables: A B Z Z : zip A B Z ============================ forall K I, mem (K, I) Z -> mem K A
< intros M. Subgoal 1: Variables: A B Z K I Z : zip A B Z M : mem (K, I) Z ============================ mem K A
< apply zip_mem_after to Z M. Subgoal 1: Variables: A B Z K I Z : zip A B Z M : mem (K, I) Z H1 : mem K A H2 : mem I B ============================ mem K A
< search. Subgoal 2: Variables: A B Z Z : zip A B Z ============================ forall K, mem K A -> exists I, mem (K, I) Z
< intros M. Subgoal 2: Variables: A B Z K Z : zip A B Z M : mem K A ============================ exists I, mem (K, I) Z
< apply zip_mem_before1 to Z M. Subgoal 2: Variables: A B Z K B1 Z : zip A B Z M : mem K A H1 : mem (K, B1) Z ============================ exists I, mem (K, I) Z
< search. Subgoal 3: Variables: A B Z Z : zip A B Z ============================ ctx_names [] []
< search. Proof completed.
< Define projedCtxs : (list (list (pair (string) value))) -> (list (list (pair (string) value))) -> prop by projedCtxs [] []; projedCtxs (A::ARest) (B::BRest) := (((forall X VB, lookup B X VB -> exists VA, lookup A X VA) /\ (forall X VA, lookup A X VA -> exists VB, lookup B X VB)) /\ (forall X VA VB, lookup A X VA -> lookup B X VB -> projedVal VA VB)) /\ projedCtxs ARest BRest.
< Theorem projedCtxs_add_scope : forall A B, projedCtxs A B -> projedCtxs ([]::A) ([]::B). ============================ forall A B, projedCtxs A B -> projedCtxs ([]::A) ([]::B)
< intros PC. Variables: A B PC : projedCtxs A B ============================ projedCtxs ([]::A) ([]::B)
< unfold . Subgoal 1: Variables: A B PC : projedCtxs A B ============================ forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
< intros LB. Subgoal 1: Variables: A B X VB PC : projedCtxs A B LB : lookup [] X VB ============================ exists VA, lookup [] X VA
< case LB. Subgoal 2: Variables: A B PC : projedCtxs A B ============================ forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
< intros LA. Subgoal 2: Variables: A B X VA PC : projedCtxs A B LA : lookup [] X VA ============================ exists VB, lookup [] X VB
< case LA. Subgoal 3: Variables: A B PC : projedCtxs A B ============================ forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
< intros LA. Subgoal 3: Variables: A B X VA VB PC : projedCtxs A B LA : lookup [] X VA H1 : lookup [] X VB ============================ projedVal VA VB
< case LA. Subgoal 4: Variables: A B PC : projedCtxs A B ============================ projedCtxs A B
< search. Proof completed.
< Theorem projedCtxs_lookupScopes_exists : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB -> exists VA, lookupScopes X A VA /\ projedVal VA VB. ============================ forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB -> exists VA, lookupScopes X A VA /\ projedVal VA VB
< induction on 5. IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB ============================ forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB @ -> exists VA, lookupScopes X A VA /\ projedVal VA VB
< intros IsA IsB IsX PC LS. Variables: A B X VB IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B LS : lookupScopes X B VB @ ============================ exists VA, lookupScopes X A VA /\ projedVal VA VB
< LS: case LS. Subgoal 1: Variables: A X VB Rest L IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X PC : projedCtxs A (L::Rest) LS : lookup L X VB ============================ exists VA, lookupScopes X A VA /\ projedVal VA VB
< PC: case PC. Subgoal 1: Variables: X VB Rest L ARest A1 IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X LS : lookup L X VB PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< LA: apply PC to LS. Subgoal 1: Variables: X VB Rest L ARest A1 VA IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X LS : lookup L X VB PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LA : lookup A1 X VA ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< apply PC2 to LA LS. Subgoal 1: Variables: X VB Rest L ARest A1 VA IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X LS : lookup L X VB PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LA : lookup A1 X VA H1 : projedVal VA VB ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< search. Subgoal 2: Variables: A X VB Rest L IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X PC : projedCtxs A (L::Rest) LS : no_lookup L X LS1 : lookupScopes X Rest VB * ============================ exists VA, lookupScopes X A VA /\ projedVal VA VB
< PC: case PC. Subgoal 2: Variables: X VB Rest L ARest A1 IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X LS : no_lookup L X LS1 : lookupScopes X Rest VB * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< IsA: case IsA. Subgoal 2: Variables: X VB Rest L ARest A1 IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X LS : no_lookup L X LS1 : lookupScopes X Rest VB * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< IsB: case IsB. Subgoal 2: Variables: X VB Rest L ARest A1 IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsX : is_string X LS : no_lookup L X LS1 : lookupScopes X Rest VB * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< apply IH to _ _ _ PC3 LS1. Subgoal 2: Variables: X VB Rest L ARest A1 VA IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsX : is_string X LS : no_lookup L X LS1 : lookupScopes X Rest VB * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest H1 : lookupScopes X ARest VA H2 : projedVal VA VB ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< Or: apply lookup_string_value_list_or_no to IsA IsX. Subgoal 2: Variables: X VB Rest L ARest A1 VA IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsX : is_string X LS : no_lookup L X LS1 : lookupScopes X Rest VB * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest H1 : lookupScopes X ARest VA H2 : projedVal VA VB Or : (exists V, lookup A1 X V) \/ no_lookup A1 X ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< LA: case Or. Subgoal 2.1: Variables: X VB Rest L ARest A1 VA V IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsX : is_string X LS : no_lookup L X LS1 : lookupScopes X Rest VB * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest H1 : lookupScopes X ARest VA H2 : projedVal VA VB LA : lookup A1 X V ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< LB: apply PC1 to LA. Subgoal 2.1: Variables: X VB Rest L ARest A1 VA V VB1 IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsX : is_string X LS : no_lookup L X LS1 : lookupScopes X Rest VB * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest H1 : lookupScopes X ARest VA H2 : projedVal VA VB LA : lookup A1 X V LB : lookup L X VB1 ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< apply no_lookup to LS LB. Subgoal 2.2: Variables: X VB Rest L ARest A1 VA IH : forall A B X VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X B VB * -> exists VA, lookupScopes X A VA /\ projedVal VA VB IsX : is_string X LS : no_lookup L X LS1 : lookupScopes X Rest VB * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest H1 : lookupScopes X ARest VA H2 : projedVal VA VB LA : no_lookup A1 X ============================ exists VA, lookupScopes X (A1::ARest) VA /\ projedVal VA VB
< search. Proof completed.
< Theorem projedCtxs_lookupScopes : forall A B X VA VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X A VA -> lookupScopes X B VB -> projedVal VA VB. ============================ forall A B X VA VB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X A VA -> lookupScopes X B VB -> projedVal VA VB
< intros IsA IsB IsX PC LA LB. Variables: A B X VA VB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B LA : lookupScopes X A VA LB : lookupScopes X B VB ============================ projedVal VA VB
< LA': apply projedCtxs_lookupScopes_exists to _ _ _ PC LB. Variables: A B X VA VB VA1 IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B LA : lookupScopes X A VA LB : lookupScopes X B VB LA' : lookupScopes X A VA1 LA'1 : projedVal VA1 VB ============================ projedVal VA VB
< apply lookupScopes_unique to LA LA'. Variables: A B X VB VA1 IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B LA : lookupScopes X A VA1 LB : lookupScopes X B VB LA' : lookupScopes X A VA1 LA'1 : projedVal VA1 VB ============================ projedVal VA1 VB
< search. Proof completed.
< Theorem projedCtxs_replaceScopes_exists : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB. ============================ forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
< induction on 6. IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB ============================ forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB @ -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
< intros IsA IsB IsX PC PV RB. Variables: A B X VA VB RB IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B PV : projedVal VA VB RB : replaceScopes X VB B RB @ ============================ exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB
< RB: case RB. Subgoal 1: Variables: A X VA VB I Rest LRemain L IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X PC : projedCtxs A (L::Rest) PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain ============================ exists RA, replaceScopes X VA A RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
< case IsB. Subgoal 1: Variables: A X VA VB I Rest LRemain L IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) A IsX : is_string X PC : projedCtxs A (L::Rest) PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest ============================ exists RA, replaceScopes X VA A RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
< PC: case PC. Subgoal 1: Variables: X VA VB I Rest LRemain L ARest A1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
< LB: apply mem_lookup to _ RB. Subgoal 1: Variables: X VA VB I Rest LRemain L ARest A1 V' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
< LA: apply PC to LB. Subgoal 1: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
< MA: apply lookup_mem to LA. Subgoal 1: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
< IsA: case IsA. Subgoal 1: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
< RAA: apply remove_all_exists to IsA IsX. Subgoal 1: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (((X, VB)::LRemain)::Rest)
< exists ((X, VA)::EE')::ARest. Subgoal 1: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' ============================ replaceScopes X VA (A1::ARest) (((X, VA)::EE')::ARest) /\ projedCtxs (((X, VA)::EE')::ARest) (((X, VB)::LRemain)::Rest)
< split. Subgoal 1.1: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' ============================ replaceScopes X VA (A1::ARest) (((X, VA)::EE')::ARest)
< search. Subgoal 1.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' ============================ projedCtxs (((X, VA)::EE')::ARest) (((X, VB)::LRemain)::Rest)
< unfold . Subgoal 1.2.1: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' ============================ forall X1 VB1, lookup ((X, VB)::LRemain) X1 VB1 -> exists VA1, lookup ((X, VA)::EE') X1 VA1
< intros LB'. Subgoal 1.2.1: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LB' : lookup ((X, VB)::LRemain) X1 VB1 ============================ exists VA1, lookup ((X, VA)::EE') X1 VA1
< LB': case LB'. Subgoal 1.2.1.1: Variables: VA I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA VB1 RB : mem (X1, I) L RB1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X1 V' LA : lookup A1 X1 VA1 MA : mem (X1, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X1 EE' ============================ exists VA1, lookup ((X1, VA)::EE') X1 VA1
< search. Subgoal 1.2.1.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LB' : X = X1 -> false LB'1 : lookup LRemain X1 VB1 ============================ exists VA1, lookup ((X, VA)::EE') X1 VA1
< LB'': apply remove_all_lookup_other to RB1 LB'1 _. Subgoal 1.2.1.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LB' : X = X1 -> false LB'1 : lookup LRemain X1 VB1 LB'' : lookup L X1 VB1 ============================ exists VA1, lookup ((X, VA)::EE') X1 VA1
< LA'': apply PC to LB''. Subgoal 1.2.1.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1 VA2 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LB' : X = X1 -> false LB'1 : lookup LRemain X1 VB1 LB'' : lookup L X1 VB1 LA'' : lookup A1 X1 VA2 ============================ exists VA1, lookup ((X, VA)::EE') X1 VA1
< LA': apply remove_all_lookup_other_back to RAA LA'' _. Subgoal 1.2.1.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VB1 VA2 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LB' : X = X1 -> false LB'1 : lookup LRemain X1 VB1 LB'' : lookup L X1 VB1 LA'' : lookup A1 X1 VA2 LA' : lookup EE' X1 VA2 ============================ exists VA1, lookup ((X, VA)::EE') X1 VA1
< search. Subgoal 1.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' ============================ forall X1 VA1, lookup ((X, VA)::EE') X1 VA1 -> exists VB1, lookup ((X, VB)::LRemain) X1 VB1
< intros LA'. Subgoal 1.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : lookup ((X, VA)::EE') X1 VA2 ============================ exists VB1, lookup ((X, VB)::LRemain) X1 VB1
< LA': case LA'. Subgoal 1.2.2.1: Variables: VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA2 VB RB : mem (X1, I) L RB1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X1 V' LA : lookup A1 X1 VA1 MA : mem (X1, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X1 EE' ============================ exists VB1, lookup ((X1, VB)::LRemain) X1 VB1
< search. Subgoal 1.2.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 ============================ exists VB1, lookup ((X, VB)::LRemain) X1 VB1
< LA'': apply remove_all_lookup_other to RAA LA'1 _. Subgoal 1.2.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 LA'' : lookup A1 X1 VA2 ============================ exists VB1, lookup ((X, VB)::LRemain) X1 VB1
< LB'': apply PC1 to LA''. Subgoal 1.2.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 LA'' : lookup A1 X1 VA2 LB'' : lookup L X1 VB1 ============================ exists VB1, lookup ((X, VB)::LRemain) X1 VB1
< LB': apply remove_all_lookup_other_back to RB1 LB'' _. Subgoal 1.2.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 LA'' : lookup A1 X1 VA2 LB'' : lookup L X1 VB1 LB' : lookup LRemain X1 VB1 ============================ exists VB1, lookup ((X, VB)::LRemain) X1 VB1
< search. Subgoal 1.2.3: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' ============================ forall X1 VA1 VB1, lookup ((X, VA)::EE') X1 VA1 -> lookup ((X, VB)::LRemain) X1 VB1 -> projedVal VA1 VB1
< intros LA' LB'. Subgoal 1.2.3: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : lookup ((X, VA)::EE') X1 VA2 LB' : lookup ((X, VB)::LRemain) X1 VB1 ============================ projedVal VA2 VB1
< LA': case LA'. Subgoal 1.2.3.1: Variables: VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA2 VB RB : mem (X1, I) L RB1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X1 V' LA : lookup A1 X1 VA1 MA : mem (X1, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X1 EE' LB' : lookup ((X1, VB)::LRemain) X1 VB1 ============================ projedVal VA2 VB1
< LB': case LB'. Subgoal 1.2.3.1.1: Variables: I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA2 VB1 RB : mem (X1, I) L RB1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X1 V' LA : lookup A1 X1 VA1 MA : mem (X1, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X1 EE' ============================ projedVal VA2 VB1
< search. Subgoal 1.2.3.1.2: Variables: VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA2 VB RB : mem (X1, I) L RB1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X1 V' LA : lookup A1 X1 VA1 MA : mem (X1, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X1 EE' LB' : X1 = X1 -> false LB'1 : lookup LRemain X1 VB1 ============================ projedVal VA2 VB1
< apply LB' to _. Subgoal 1.2.3.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LB' : lookup ((X, VB)::LRemain) X1 VB1 LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 ============================ projedVal VA2 VB1
< LB': case LB'. Subgoal 1.2.3.2.1: Variables: VA I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA VB1 RB : mem (X1, I) L RB1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X1 V' LA : lookup A1 X1 VA1 MA : mem (X1, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X1 EE' LA' : X1 = X1 -> false LA'1 : lookup EE' X1 VA2 ============================ projedVal VA2 VB1
< apply LA' to _. Subgoal 1.2.3.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 LB' : X = X1 -> false LB'1 : lookup LRemain X1 VB1 ============================ projedVal VA2 VB1
< LA'': apply remove_all_lookup_other to RAA LA'1 _. Subgoal 1.2.3.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 LB' : X = X1 -> false LB'1 : lookup LRemain X1 VB1 LA'' : lookup A1 X1 VA2 ============================ projedVal VA2 VB1
< LB'': apply remove_all_lookup_other to RB1 LB'1 _. Subgoal 1.2.3.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 LB' : X = X1 -> false LB'1 : lookup LRemain X1 VB1 LA'' : lookup A1 X1 VA2 LB'' : lookup L X1 VB1 ============================ projedVal VA2 VB1
< apply PC2 to LA'' LB''. Subgoal 1.2.3.2.2: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' X1 VA2 VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' LA' : X = X1 -> false LA'1 : lookup EE' X1 VA2 LB' : X = X1 -> false LB'1 : lookup LRemain X1 VB1 LA'' : lookup A1 X1 VA2 LB'' : lookup L X1 VB1 H3 : projedVal VA2 VB1 ============================ projedVal VA2 VB1
< search. Subgoal 1.2.4: Variables: X VA VB I Rest LRemain L ARest A1 V' VA1 EE' IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : mem (X, I) L RB1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest LB : lookup L X V' LA : lookup A1 X VA1 MA : mem (X, VA1) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest RAA : remove_all A1 X EE' ============================ projedCtxs ARest Rest
< search. Subgoal 2: Variables: A X VA VB New L Rest IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X PC : projedCtxs A (L::Rest) PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * ============================ exists RA, replaceScopes X VA A RA /\ projedCtxs RA (L::New)
< PC: case PC. Subgoal 2: Variables: X VA VB New L Rest ARest A1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest) IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
< IsA: case IsA. Subgoal 2: Variables: X VA VB New L Rest ARest A1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsB : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsX : is_string X PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
< IsB: case IsB. Subgoal 2: Variables: X VA VB New L Rest ARest A1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
< RA: apply IH to _ _ _ PC3 _ RB1. Subgoal 2: Variables: X VA VB New L Rest ARest A1 RA IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest RA : replaceScopes X VA ARest RA RA1 : projedCtxs RA New ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
< Or: apply lookup_string_value_list_or_no to IsA IsX. Subgoal 2: Variables: X VA VB New L Rest ARest A1 RA IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest RA : replaceScopes X VA ARest RA RA1 : projedCtxs RA New Or : (exists V, lookup A1 X V) \/ no_lookup A1 X ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
< LA: case Or. Subgoal 2.1: Variables: X VA VB New L Rest ARest A1 RA V IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest RA : replaceScopes X VA ARest RA RA1 : projedCtxs RA New LA : lookup A1 X V ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
< LB: apply PC1 to LA. Subgoal 2.1: Variables: X VA VB New L Rest ARest A1 RA V VB1 IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest RA : replaceScopes X VA ARest RA RA1 : projedCtxs RA New LA : lookup A1 X V LB : lookup L X VB1 ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
< apply no_lookup to RB LB. Subgoal 2.2: Variables: X VA VB New L Rest ARest A1 RA IH : forall A B X VA VB RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VB B RB * -> exists RA, replaceScopes X VA A RA /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RB : no_lookup L X RB1 : replaceScopes X VB Rest New * PC : forall X VB, lookup L X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup L X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup L X VB -> projedVal VA VB PC3 : projedCtxs ARest Rest IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest IsB : is_list (is_pair is_string is_value) L IsB1 : is_list (is_list (is_pair is_string is_value)) Rest RA : replaceScopes X VA ARest RA RA1 : projedCtxs RA New LA : no_lookup A1 X ============================ exists RA, replaceScopes X VA (A1::ARest) RA /\ projedCtxs RA (L::New)
< search. Proof completed.
< Theorem projedCtxs_replaceScopes : forall A B X VA VB RA RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA -> replaceScopes X VB B RB -> projedCtxs RA RB. ============================ forall A B X VA VB RA RB, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA -> replaceScopes X VB B RB -> projedCtxs RA RB
< intros IsA IsB IsX PC PV RA RB. Variables: A B X VA VB RA RB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B PV : projedVal VA VB RA : replaceScopes X VA A RA RB : replaceScopes X VB B RB ============================ projedCtxs RA RB
< RA': apply projedCtxs_replaceScopes_exists to _ _ _ PC PV RB. Variables: A B X VA VB RA RB RA1 IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B PV : projedVal VA VB RA : replaceScopes X VA A RA RB : replaceScopes X VB B RB RA' : replaceScopes X VA A RA1 RA'1 : projedCtxs RA1 RB ============================ projedCtxs RA RB
< apply replaceScopes_unique to RA RA'. Variables: A B X VA VB RB RA1 IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B PV : projedVal VA VB RA : replaceScopes X VA A RA1 RB : replaceScopes X VB B RB RA' : replaceScopes X VA A RA1 RA'1 : projedCtxs RA1 RB ============================ projedCtxs RA1 RB
< search. Proof completed.
< Theorem scopes_same_projedCtxs : forall A B C, scopes_same A B -> projedCtxs B C -> projedCtxs A C. ============================ forall A B C, scopes_same A B -> projedCtxs B C -> projedCtxs A C
< induction on 1. IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C ============================ forall A B C, scopes_same A B @ -> projedCtxs B C -> projedCtxs A C
< intros SS PC. Variables: A B C IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : scopes_same A B @ PC : projedCtxs B C ============================ projedCtxs A C
< SS: case SS. Subgoal 1: Variables: C IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C PC : projedCtxs [] C ============================ projedCtxs [] C
< case PC. Subgoal 1: IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C ============================ projedCtxs [] []
< search. Subgoal 2: Variables: C BRest B1 ARest A1 IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C PC : projedCtxs (B1::BRest) C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * ============================ projedCtxs (A1::ARest) C
< PC: case PC. Subgoal 2: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 ============================ projedCtxs (A1::ARest) (B2::BRest1)
< unfold . Subgoal 2.1: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 ============================ forall X VB, lookup B2 X VB -> exists VA, lookup A1 X VA
< intros LB2. Subgoal 2.1: Variables: BRest B1 ARest A1 BRest1 B2 X VB IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LB2 : lookup B2 X VB ============================ exists VA, lookup A1 X VA
< LB1: apply PC to LB2. Subgoal 2.1: Variables: BRest B1 ARest A1 BRest1 B2 X VB VA IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LB2 : lookup B2 X VB LB1 : lookup B1 X VA ============================ exists VA, lookup A1 X VA
< apply SS1 to LB1. Subgoal 2.1: Variables: BRest B1 ARest A1 BRest1 B2 X VB VA IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LB2 : lookup B2 X VB LB1 : lookup B1 X VA H1 : lookup A1 X VA ============================ exists VA, lookup A1 X VA
< search. Subgoal 2.2: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 ============================ forall X VA, lookup A1 X VA -> exists VB, lookup B2 X VB
< intros LA. Subgoal 2.2: Variables: BRest B1 ARest A1 BRest1 B2 X VA IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LA : lookup A1 X VA ============================ exists VB, lookup B2 X VB
< LB1: apply SS to LA. Subgoal 2.2: Variables: BRest B1 ARest A1 BRest1 B2 X VA IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LA : lookup A1 X VA LB1 : lookup B1 X VA ============================ exists VB, lookup B2 X VB
< apply PC1 to LB1. Subgoal 2.2: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LA : lookup A1 X VA LB1 : lookup B1 X VA H1 : lookup B2 X VB ============================ exists VB, lookup B2 X VB
< search. Subgoal 2.3: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 ============================ forall X VA VB, lookup A1 X VA -> lookup B2 X VB -> projedVal VA VB
< intros LA LB2. Subgoal 2.3: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LA : lookup A1 X VA LB2 : lookup B2 X VB ============================ projedVal VA VB
< LB1: apply SS to LA. Subgoal 2.3: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LA : lookup A1 X VA LB2 : lookup B2 X VB LB1 : lookup B1 X VA ============================ projedVal VA VB
< apply PC2 to LB1 LB2. Subgoal 2.3: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 LA : lookup A1 X VA LB2 : lookup B2 X VB LB1 : lookup B1 X VA H1 : projedVal VA VB ============================ projedVal VA VB
< search. Subgoal 2.4: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 ============================ projedCtxs ARest BRest1
< apply IH to SS2 PC3. Subgoal 2.4: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, scopes_same A B * -> projedCtxs B C -> projedCtxs A C SS : forall X V, lookup A1 X V -> lookup B1 X V SS1 : forall X V, lookup B1 X V -> lookup A1 X V SS2 : scopes_same ARest BRest * PC : forall X VB, lookup B2 X VB -> exists VA, lookup B1 X VA PC1 : forall X VA, lookup B1 X VA -> exists VB, lookup B2 X VB PC2 : forall X VA VB, lookup B1 X VA -> lookup B2 X VB -> projedVal VA VB PC3 : projedCtxs BRest BRest1 H1 : projedCtxs ARest BRest1 ============================ projedCtxs ARest BRest1
< search. Proof completed.
< Theorem projedCtxs_scopes_same : forall A B C, projedCtxs A B -> scopes_same B C -> projedCtxs A C. ============================ forall A B C, projedCtxs A B -> scopes_same B C -> projedCtxs A C
< induction on 1. IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C ============================ forall A B C, projedCtxs A B @ -> scopes_same B C -> projedCtxs A C
< intros PC SS. Variables: A B C IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : projedCtxs A B @ SS : scopes_same B C ============================ projedCtxs A C
< PC: case PC. Subgoal 1: Variables: C IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C SS : scopes_same [] C ============================ projedCtxs [] C
< case SS. Subgoal 1: IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C ============================ projedCtxs [] []
< search. Subgoal 2: Variables: C BRest B1 ARest A1 IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C SS : scopes_same (B1::BRest) C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * ============================ projedCtxs (A1::ARest) C
< SS: case SS. Subgoal 2: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 ============================ projedCtxs (A1::ARest) (B2::BRest1)
< unfold . Subgoal 2.1: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 ============================ forall X VB, lookup B2 X VB -> exists VA, lookup A1 X VA
< intros LB2. Subgoal 2.1: Variables: BRest B1 ARest A1 BRest1 B2 X VB IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LB2 : lookup B2 X VB ============================ exists VA, lookup A1 X VA
< LB1: apply SS1 to LB2. Subgoal 2.1: Variables: BRest B1 ARest A1 BRest1 B2 X VB IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LB2 : lookup B2 X VB LB1 : lookup B1 X VB ============================ exists VA, lookup A1 X VA
< apply PC to LB1. Subgoal 2.1: Variables: BRest B1 ARest A1 BRest1 B2 X VB VA IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LB2 : lookup B2 X VB LB1 : lookup B1 X VB H1 : lookup A1 X VA ============================ exists VA, lookup A1 X VA
< search. Subgoal 2.2: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 ============================ forall X VA, lookup A1 X VA -> exists VB, lookup B2 X VB
< intros LA. Subgoal 2.2: Variables: BRest B1 ARest A1 BRest1 B2 X VA IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LA : lookup A1 X VA ============================ exists VB, lookup B2 X VB
< LB1: apply PC1 to LA. Subgoal 2.2: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LA : lookup A1 X VA LB1 : lookup B1 X VB ============================ exists VB, lookup B2 X VB
< apply SS to LB1. Subgoal 2.2: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LA : lookup A1 X VA LB1 : lookup B1 X VB H1 : lookup B2 X VB ============================ exists VB, lookup B2 X VB
< search. Subgoal 2.3: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 ============================ forall X VA VB, lookup A1 X VA -> lookup B2 X VB -> projedVal VA VB
< intros LA LB2. Subgoal 2.3: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LA : lookup A1 X VA LB2 : lookup B2 X VB ============================ projedVal VA VB
< LB1: apply SS1 to LB2. Subgoal 2.3: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LA : lookup A1 X VA LB2 : lookup B2 X VB LB1 : lookup B1 X VB ============================ projedVal VA VB
< apply PC2 to LA LB1. Subgoal 2.3: Variables: BRest B1 ARest A1 BRest1 B2 X VA VB IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 LA : lookup A1 X VA LB2 : lookup B2 X VB LB1 : lookup B1 X VB H1 : projedVal VA VB ============================ projedVal VA VB
< search. Subgoal 2.4: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 ============================ projedCtxs ARest BRest1
< apply IH to PC3 SS2. Subgoal 2.4: Variables: BRest B1 ARest A1 BRest1 B2 IH : forall A B C, projedCtxs A B * -> scopes_same B C -> projedCtxs A C PC : forall X VB, lookup B1 X VB -> exists VA, lookup A1 X VA PC1 : forall X VA, lookup A1 X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup A1 X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs ARest BRest * SS : forall X V, lookup B1 X V -> lookup B2 X V SS1 : forall X V, lookup B2 X V -> lookup B1 X V SS2 : scopes_same BRest BRest1 H1 : projedCtxs ARest BRest1 ============================ projedCtxs ARest BRest1
< search. Proof completed.
< Define projedArgs : (list value) -> (list value) -> prop by projedArgs [] []; projedArgs (VA::ARest) (VB::BRest) := projedVal VA VB /\ projedArgs ARest BRest.
< Theorem zip_projedArgs : forall N VA VB ZA ZB, projedArgs VA VB -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]. ============================ forall N VA VB ZA ZB, projedArgs VA VB -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
< induction on 1. IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ============================ forall N VA VB ZA ZB, projedArgs VA VB @ -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB]
< intros PA ZA ZB. Variables: N VA VB ZA ZB IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedArgs VA VB @ ZA : zip N VA ZA ZB : zip N VB ZB ============================ projedCtxs [ZA] [ZB]
< PA: case PA. Subgoal 1: Variables: N ZA ZB IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ZA : zip N [] ZA ZB : zip N [] ZB ============================ projedCtxs [ZA] [ZB]
< case ZA. Subgoal 1: Variables: ZB IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ZB : zip [] [] ZB ============================ projedCtxs [[]] [ZB]
< case ZB. Subgoal 1: IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ============================ projedCtxs [[]] [[]]
< unfold . Subgoal 1.1: IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ============================ forall X VB, lookup [] X VB -> exists VA, lookup [] X VA
< intros L. Subgoal 1.1: Variables: X VB1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] L : lookup [] X VB1 ============================ exists VA, lookup [] X VA
< case L. Subgoal 1.2: IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ============================ forall X VA, lookup [] X VA -> exists VB, lookup [] X VB
< intros L. Subgoal 1.2: Variables: X VA1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] L : lookup [] X VA1 ============================ exists VB, lookup [] X VB
< case L. Subgoal 1.3: IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ============================ forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB
< intros L. Subgoal 1.3: Variables: X VA1 VB1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] L : lookup [] X VA1 H1 : lookup [] X VB1 ============================ projedVal VA1 VB1
< case L. Subgoal 1.4: IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ============================ projedCtxs [] []
< search. Subgoal 2: Variables: N ZA ZB BRest VB1 ARest VA1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ZA : zip N (VA1::ARest) ZA ZB : zip N (VB1::BRest) ZB PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ============================ projedCtxs [ZA] [ZB]
< ZA: case ZA. Subgoal 2: Variables: ZB BRest VB1 ARest VA1 Rest A ARest1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] ZB : zip (A::ARest1) (VB1::BRest) ZB PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ============================ projedCtxs [(A, VA1)::Rest] [ZB]
< ZB: case ZB. Subgoal 2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 ============================ projedCtxs [(A, VA1)::Rest] [(A, VB1)::Rest1]
< PC: apply IH to PA1 ZA ZB. Subgoal 2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : projedCtxs [Rest] [Rest1] ============================ projedCtxs [(A, VA1)::Rest] [(A, VB1)::Rest1]
< PC: case PC. Subgoal 2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] ============================ projedCtxs [(A, VA1)::Rest] [(A, VB1)::Rest1]
< unfold . Subgoal 2.1: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] ============================ forall X VB, lookup ((A, VB1)::Rest1) X VB -> exists VA, lookup ((A, VA1)::Rest) X VA
< intros LB. Subgoal 2.1: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LB : lookup ((A, VB1)::Rest1) X VB2 ============================ exists VA, lookup ((A, VA1)::Rest) X VA
< LB: case LB. Subgoal 2.1.1: Variables: BRest ARest VA1 Rest ARest1 Rest1 X VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB2 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] ============================ exists VA, lookup ((X, VA1)::Rest) X VA
< search. Subgoal 2.1.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LB : A = X -> false LB1 : lookup Rest1 X VB2 ============================ exists VA, lookup ((A, VA1)::Rest) X VA
< apply PC to LB1. Subgoal 2.1.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VB2 VA2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LB : A = X -> false LB1 : lookup Rest1 X VB2 H1 : lookup Rest X VA2 ============================ exists VA, lookup ((A, VA1)::Rest) X VA
< search. Subgoal 2.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] ============================ forall X VA, lookup ((A, VA1)::Rest) X VA -> exists VB, lookup ((A, VB1)::Rest1) X VB
< intros LA. Subgoal 2.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LA : lookup ((A, VA1)::Rest) X VA2 ============================ exists VB, lookup ((A, VB1)::Rest1) X VB
< LA: case LA. Subgoal 2.2.1: Variables: BRest VB1 ARest Rest ARest1 Rest1 X VA2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA2 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] ============================ exists VB, lookup ((X, VB1)::Rest1) X VB
< search. Subgoal 2.2.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LA : A = X -> false LA1 : lookup Rest X VA2 ============================ exists VB, lookup ((A, VB1)::Rest1) X VB
< apply PC1 to LA1. Subgoal 2.2.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LA : A = X -> false LA1 : lookup Rest X VA2 H1 : lookup Rest1 X VB2 ============================ exists VB, lookup ((A, VB1)::Rest1) X VB
< search. Subgoal 2.3: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] ============================ forall X VA VB, lookup ((A, VA1)::Rest) X VA -> lookup ((A, VB1)::Rest1) X VB -> projedVal VA VB
< intros LA LB. Subgoal 2.3: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LA : lookup ((A, VA1)::Rest) X VA2 LB : lookup ((A, VB1)::Rest1) X VB2 ============================ projedVal VA2 VB2
< LA: case LA. Subgoal 2.3.1: Variables: BRest VB1 ARest Rest ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA2 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LB : lookup ((X, VB1)::Rest1) X VB2 ============================ projedVal VA2 VB2
< LB: case LB. Subgoal 2.3.1.1: Variables: BRest ARest Rest ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA2 VB2 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] ============================ projedVal VA2 VB2
< search. Subgoal 2.3.1.2: Variables: BRest VB1 ARest Rest ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA2 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LB : X = X -> false LB1 : lookup Rest1 X VB2 ============================ projedVal VA2 VB2
< apply LB to _. Subgoal 2.3.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LB : lookup ((A, VB1)::Rest1) X VB2 LA : A = X -> false LA1 : lookup Rest X VA2 ============================ projedVal VA2 VB2
< LB: case LB. Subgoal 2.3.2.1: Variables: BRest ARest VA1 Rest ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB2 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LA : X = X -> false LA1 : lookup Rest X VA2 ============================ projedVal VA2 VB2
< apply LA to _. Subgoal 2.3.2.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LA : A = X -> false LA1 : lookup Rest X VA2 LB : A = X -> false LB1 : lookup Rest1 X VB2 ============================ projedVal VA2 VB2
< apply PC2 to LA1 LB1. Subgoal 2.3.2.2: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 X VA2 VB2 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] LA : A = X -> false LA1 : lookup Rest X VA2 LB : A = X -> false LB1 : lookup Rest1 X VB2 H1 : projedVal VA2 VB2 ============================ projedVal VA2 VB2
< search. Subgoal 2.4: Variables: BRest VB1 ARest VA1 Rest A ARest1 Rest1 IH : forall N VA VB ZA ZB, projedArgs VA VB * -> zip N VA ZA -> zip N VB ZB -> projedCtxs [ZA] [ZB] PA : projedVal VA1 VB1 PA1 : projedArgs ARest BRest * ZA : zip ARest1 ARest Rest ZB : zip ARest1 BRest Rest1 PC : forall X VB, lookup Rest1 X VB -> exists VA, lookup Rest X VA PC1 : forall X VA, lookup Rest X VA -> exists VB, lookup Rest1 X VB PC2 : forall X VA VB, lookup Rest X VA -> lookup Rest1 X VB -> projedVal VA VB PC3 : projedCtxs [] [] ============================ projedCtxs [] []
< search. Proof completed.
< Extensible_Theorem trans_evalExpr_same : forall E T EE EE_T FE FE_T V V_T O O_T, IsE : is_expr E -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> RFE : rel_FE FE FE_T -> PC : projedCtxs EE EE_T -> Trans : transE E T -> Ev : evalExpr FE EE E V O -> EvT : evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T on Ev as IH_E, trans_evalStmt_same : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> PC : projedCtxs (Scope::EE) EE_T -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> Ev : evalStmt FE (Scope::EE) S EE' O -> EvT : evalStmt FE_T EE_T T EE_T' O_T -> O = O_T on Ev as IH_S, trans_evalStmt_relCtxs : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> PC : projedCtxs (Scope::EE) EE_T -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> Ev : evalStmt FE (Scope::EE) S EE' O -> EvT : evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' on Ev as IH_S_C, trans_evalArgs_same : forall A T EE EE_T FE FE_T V V_T O O_T, IsA : is_args A -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> RFE : rel_FE FE FE_T -> PC : projedCtxs EE EE_T -> Trans : transA A T -> Ev : evalArgs FE EE A V O -> EvT : evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T on Ev as IH_A, trans_evalRecFields_same : forall RF T EE EE_T FE FE_T V V_T O O_T, IsRF : is_recFieldExprs RF -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> RFE : rel_FE FE FE_T -> PC : projedCtxs EE EE_T -> Trans : transRF RF T -> Ev : evalRecFields FE EE RF V O -> EvT : evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T on Ev as IH_RF. Subgoal 1: Variables: E T EE EE_T FE FE_T V V_T O O_T IsE : is_expr E IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE E T Ev : evalExpr FE EE E V O EvT : evalExpr FE_T EE_T T V_T O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
< search. Subgoal 2: Variables: S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T IsS : is_stmt S IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names S T Names' Ev : evalStmt FE (Scope::EE) S EE' O EvT : evalStmt FE_T EE_T T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
< search. Subgoal 3: Variables: S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T IsS : is_stmt S IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names S T Names' Ev : evalStmt FE (Scope::EE) S EE' O EvT : evalStmt FE_T EE_T T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
< search. Subgoal 4: Variables: A T EE EE_T FE FE_T V V_T O O_T IsA : is_args A IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA A T Ev : evalArgs FE EE A V O EvT : evalArgs FE_T EE_T T V_T O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
< search. Subgoal 5: Variables: RF T EE EE_T FE FE_T V V_T O O_T IsRF : is_recFieldExprs RF IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF RF T Ev : evalRecFields FE EE RF V O EvT : evalRecFields FE_T EE_T T V_T O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
< search. Subgoal 6.1.1: Variables: T EE EE_T FE FE_T V_T O_T I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (num I) T Ev : evalExpr FE EE (num I) (intVal I) [] @ EvT : evalExpr FE_T EE_T T V_T O_T ============================ projedVal (intVal I) V_T /\ [] = O_T
< case Trans. Subgoal 6.1.1: Variables: EE EE_T FE FE_T V_T O_T I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (num I) (intVal I) [] @ EvT : evalExpr FE_T EE_T (num I) V_T O_T ============================ projedVal (intVal I) V_T /\ [] = O_T
< case EvT. Subgoal 6.1.1: Variables: EE EE_T FE FE_T I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (num I) (intVal I) [] @ ============================ projedVal (intVal I) (intVal I) /\ [] = []
< search. Subgoal 6.1.2: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (plus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O ============================ projedVal (intVal I) V_T /\ O = O_T
< case IsE. Subgoal 6.1.2: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal (intVal I) V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.2: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T (plus E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal (intVal I) V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< apply transE_is to _ Trans. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I4 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I4 M2 : matchInt V2 I5 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply matchInt_unique to _ M1 Ev3. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I5 EvT4 : I1 + I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I5 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply matchInt_unique to _ M2 Ev4. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 + I2 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply plus_integer_unique to Ev5 EvT4. Subgoal 6.1.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I3) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I3 Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 + I2 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal (intVal I3) (intVal I3) /\ O_T = O_T
< search. Subgoal 6.1.3: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (minus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O ============================ projedVal (intVal I) V_T /\ O = O_T
< case IsE. Subgoal 6.1.3: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal (intVal I) V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.3: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T (minus E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal (intVal I) V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< apply transE_is to _ Trans. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I4 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I4 M2 : matchInt V2 I5 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply matchInt_unique to _ M1 Ev3. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I5 EvT4 : I1 - I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I5 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply matchInt_unique to _ M2 Ev4. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 - I2 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply minus_integer_unique to Ev5 EvT4. Subgoal 6.1.3: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I3) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I3 Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 - I2 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal (intVal I3) (intVal I3) /\ O_T = O_T
< search. Subgoal 6.1.4: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (mult E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O ============================ projedVal (intVal I) V_T /\ O = O_T
< case IsE. Subgoal 6.1.4: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal (intVal I) V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.4: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T (mult E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal (intVal I) V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< apply transE_is to _ Trans. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I4 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I4 M2 : matchInt V2 I5 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply matchInt_unique to _ M1 Ev3. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I5 EvT4 : I1 * I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I5 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply matchInt_unique to _ M2 Ev4. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 * I2 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply multiply_integer_unique to Ev5 EvT4. Subgoal 6.1.4: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I3) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I3 Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 * I2 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal (intVal I3) (intVal I3) /\ O_T = O_T
< search. Subgoal 6.1.5: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (div E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O ============================ projedVal (intVal I) V_T /\ O = O_T
< case IsE. Subgoal 6.1.5: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal (intVal I) V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.5: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ EvT : evalExpr FE_T EE_T (div E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal (intVal I) V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< apply transE_is to _ Trans. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 ============================ projedVal (intVal I) (intVal I3) /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I4 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I4 EvT3 : matchInt V4 I5 EvT4 : I4 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I4 M2 : matchInt V2 I5 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply matchInt_unique to _ M1 Ev3. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I5 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I5 EvT4 : I1 / I5 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I5 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply matchInt_unique to _ M2 Ev4. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 I E2 E1 E21 E11 V3 O1 V4 O4 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 / I2 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal (intVal I) (intVal I3) /\ O_T = O_T
< apply divide_integer_unique to Ev5 EvT4. Subgoal 6.1.5: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I3) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I3 Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 / I2 = I3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 Pr2 : projedVal V2 V4 H4 : is_value V1 H5 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal (intVal I3) (intVal I3) /\ O_T = O_T
< search. Subgoal 6.1.6: Variables: T EE EE_T FE FE_T V_T O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE true T Ev : evalExpr FE EE true trueVal [] @ EvT : evalExpr FE_T EE_T T V_T O_T ============================ projedVal trueVal V_T /\ [] = O_T
< case Trans. Subgoal 6.1.6: Variables: EE EE_T FE FE_T V_T O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE true trueVal [] @ EvT : evalExpr FE_T EE_T true V_T O_T ============================ projedVal trueVal V_T /\ [] = O_T
< case EvT. Subgoal 6.1.6: Variables: EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE true trueVal [] @ ============================ projedVal trueVal trueVal /\ [] = []
< search. Subgoal 6.1.7: Variables: T EE EE_T FE FE_T V_T O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE false T Ev : evalExpr FE EE false falseVal [] @ EvT : evalExpr FE_T EE_T T V_T O_T ============================ projedVal falseVal V_T /\ [] = O_T
< case Trans. Subgoal 6.1.7: Variables: EE EE_T FE FE_T V_T O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE false falseVal [] @ EvT : evalExpr FE_T EE_T false V_T O_T ============================ projedVal falseVal V_T /\ [] = O_T
< case EvT. Subgoal 6.1.7: Variables: EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE false falseVal [] @ ============================ projedVal falseVal falseVal /\ [] = []
< search. Subgoal 6.1.8: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.8: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.8: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.8.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.8.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< apply transE_is to _ Trans. Subgoal 6.1.8.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 ============================ projedVal trueVal trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.1.8.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 H4 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.8.1: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 H3 : is_expr E11 H4 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.8.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchFalse V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.8.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchFalse V3 Pr : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.8.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchFalse V3 Pr : projedVal V1 V3 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.1.8.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchFalse V3 Pr : projedVal V1 V3 H3 : is_value V1 M : matchFalse V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.8.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.1.8.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev3. Subgoal 6.1.8.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 H3 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr _ EvT3. Subgoal 6.1.8.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 H3 : is_value V2 M : matchFalse V2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.9: Variables: T EE EE_T FE FE_T V_T O O_T V1 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.9: Variables: T EE EE_T FE FE_T V_T O O_T V1 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.9: Variables: EE EE_T FE FE_T V_T O O_T V1 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.9.1: Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchTrue V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchTrue V3 EvT4 : O2 ++ O3 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.9.1: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchTrue V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchTrue V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 ============================ projedVal falseVal trueVal /\ O2 = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.9.1: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchTrue V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchTrue V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O2 = O_T
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.1.9.1: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchTrue V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchTrue V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 H3 : is_value V1 M : matchTrue V1 ============================ projedVal falseVal trueVal /\ O2 = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.9.2: Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O_T EvT1 : matchFalse V2 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.9.2: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O_T EvT1 : matchFalse V2 Pr : projedVal V1 V2 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.9.3: Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchTrue V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchFalse V3 EvT4 : O2 ++ O3 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.9.3: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchTrue V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchFalse V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 ============================ projedVal falseVal falseVal /\ O2 = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.9.3: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchTrue V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchFalse V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 H3 : is_value V1 ============================ projedVal falseVal falseVal /\ O2 = O_T
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.1.9.3: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchTrue V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchFalse V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 H3 : is_value V1 M : matchTrue V1 ============================ projedVal falseVal falseVal /\ O2 = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.10: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.10: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.10: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.10.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< apply transE_is to _ Trans. Subgoal 6.1.10.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T H3 : is_expr E11 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.1.10.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T H3 : is_expr E11 Pr : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev3. Subgoal 6.1.10.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T H3 : is_expr E11 Pr : projedVal V2 V4 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr _ EvT3. Subgoal 6.1.10.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T H3 : is_expr E11 Pr : projedVal V2 V4 H4 : is_value V2 M : matchTrue V2 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.10.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchFalse V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.10.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchFalse V3 Pr : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.10.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchFalse V3 Pr : projedVal V1 V3 H3 : is_value V1 ============================ projedVal falseVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.1.10.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchFalse V3 Pr : projedVal V1 V3 H3 : is_value V1 M : matchFalse V1 ============================ projedVal falseVal falseVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.10.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.10.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.1.10.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 H4 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.10.3: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchTrue V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 H4 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.11: Variables: T EE EE_T FE FE_T V_T O O_T V1 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.11: Variables: T EE EE_T FE FE_T V_T O O_T V1 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.11: Variables: EE EE_T FE FE_T V_T O O_T V1 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.11.1: Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O_T EvT1 : matchTrue V2 ============================ projedVal trueVal trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.11.1: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O_T EvT1 : matchTrue V2 H3 : projedVal V1 V2 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.11.2: Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchFalse V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchTrue V3 EvT4 : O2 ++ O3 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.11.2: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchFalse V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchTrue V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 ============================ projedVal trueVal trueVal /\ O2 = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.11.2: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchFalse V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchTrue V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 H3 : is_value V1 ============================ projedVal trueVal trueVal /\ O2 = O_T
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.1.11.2: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchFalse V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchTrue V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 H3 : is_value V1 M : matchFalse V1 ============================ projedVal trueVal trueVal /\ O2 = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.11.3: Variables: EE EE_T FE FE_T O O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchFalse V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchFalse V3 EvT4 : O2 ++ O3 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.11.3: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchFalse V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchFalse V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 ============================ projedVal trueVal falseVal /\ O2 = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.11.3: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchFalse V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchFalse V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O2 = O_T
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.1.11.3: Variables: EE EE_T FE FE_T O_T V1 E2 E1 E21 E11 V2 O2 V3 O3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O2 @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V2 O2 EvT1 : matchFalse V2 EvT2 : evalExpr FE_T EE_T E21 V3 O3 EvT3 : matchFalse V3 EvT4 : O2 ++ O3 = O_T Pr : projedVal V1 V2 H3 : is_value V1 M : matchFalse V1 ============================ projedVal trueVal falseVal /\ O2 = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.12: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.12: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.12: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.12.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchTrue V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.12.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchTrue V3 Pr : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.12.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchTrue V3 Pr : projedVal V1 V3 H3 : is_value V1 ============================ projedVal trueVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.1.12.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchTrue V3 Pr : projedVal V1 V3 H3 : is_value V1 M : matchTrue V1 ============================ projedVal trueVal trueVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.12.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.12.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.1.12.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 H4 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.12.2: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 H4 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.12.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.1.12.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev3. Subgoal 6.1.12.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 H3 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr _ EvT3. Subgoal 6.1.12.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchTrue V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 H3 : is_value V2 M : matchFalse V2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.13: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.13: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.13: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.13.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchTrue V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.13.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchTrue V3 Pr : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.13.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchTrue V3 Pr : projedVal V1 V3 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.1.13.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O_T ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O_T EvT1 : matchTrue V3 Pr : projedVal V1 V3 H3 : is_value V1 M : matchTrue V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.13.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.1.13.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev3. Subgoal 6.1.13.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 H3 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr _ EvT3. Subgoal 6.1.13.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O2 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr : projedVal V2 V4 H3 : is_value V2 M : matchTrue V2 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.13.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.13.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.1.13.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 H4 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.13.3: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O4 * Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : matchFalse V3 EvT2 : evalExpr FE_T EE_T E21 V4 O4 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T H3 : projedVal V1 V3 H4 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.14: Variables: T EE EE_T FE FE_T V_T O O_T V1 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (not E1) T Ev : evalExpr FE EE (not E1) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.14: Variables: T EE EE_T FE FE_T V_T O O_T V1 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (not E1) T Ev : evalExpr FE EE (not E1) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.14: Variables: EE EE_T FE FE_T V_T O O_T V1 E1 E3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O @ EvT : evalExpr FE_T EE_T (not E3) V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.14.1: Variables: EE EE_T FE FE_T O O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchFalse V2 ============================ projedVal trueVal trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.14.1: Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchFalse V2 H2 : projedVal V1 V2 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.14.2: Variables: EE EE_T FE FE_T O O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchTrue V2 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.14.2: Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchTrue V2 Pr : projedVal V1 V2 ============================ projedVal trueVal falseVal /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.14.2: Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchTrue V2 Pr : projedVal V1 V2 H2 : is_value V1 ============================ projedVal trueVal falseVal /\ O_T = O_T
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.1.14.2: Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchTrue V2 Pr : projedVal V1 V2 H2 : is_value V1 M : matchTrue V1 ============================ projedVal trueVal falseVal /\ O_T = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.15: Variables: T EE EE_T FE FE_T V_T O O_T V1 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (not E1) T Ev : evalExpr FE EE (not E1) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.15: Variables: T EE EE_T FE FE_T V_T O O_T V1 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (not E1) T Ev : evalExpr FE EE (not E1) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.15: Variables: EE EE_T FE FE_T V_T O O_T V1 E1 E3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O @ EvT : evalExpr FE_T EE_T (not E3) V_T O_T Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.15.1: Variables: EE EE_T FE FE_T O O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchFalse V2 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.15.1: Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchFalse V2 Pr : projedVal V1 V2 ============================ projedVal falseVal trueVal /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.15.1: Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchFalse V2 Pr : projedVal V1 V2 H2 : is_value V1 ============================ projedVal falseVal trueVal /\ O_T = O_T
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.1.15.1: Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchFalse V2 Pr : projedVal V1 V2 H2 : is_value V1 M : matchFalse V1 ============================ projedVal falseVal trueVal /\ O_T = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.15.2: Variables: EE EE_T FE FE_T O O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchTrue V2 ============================ projedVal falseVal falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.15.2: Variables: EE EE_T FE FE_T O_T V1 E1 E3 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O_T * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvT : evalExpr FE_T EE_T E3 V2 O_T EvT1 : matchTrue V2 H2 : projedVal V1 V2 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.16: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.16: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.16: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T (greater E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.16.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.16.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.16.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.16.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.16.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal trueVal /\ O = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.16.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 ============================ projedVal trueVal trueVal /\ O = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.16.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.16.1: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 ============================ projedVal trueVal falseVal /\ O = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_unique to _ Ev3 M1. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I3 Ev4 : matchInt V2 I2 Ev5 : I3 > I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_unique to _ Ev4 M2. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I3 Ev4 : matchInt V2 I4 Ev5 : I3 > I4 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 ============================ projedVal trueVal falseVal /\ O = O_T
< L: case Ev5. Subgoal 6.1.16.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I3 Ev4 : matchInt V2 I4 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 L : I4 < I3 ============================ projedVal trueVal falseVal /\ O = O_T
< apply less_lesseq_flip_false to L EvT4. Subgoal 6.1.17: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.17: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.17: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T (greater E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 ============================ projedVal falseVal trueVal /\ O = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_unique to _ Ev3 M1. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I3 Ev4 : matchInt V2 I2 Ev5 : I3 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_unique to _ Ev4 M2. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I3 Ev4 : matchInt V2 I4 Ev5 : I3 <= I4 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 > I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 ============================ projedVal falseVal trueVal /\ O = O_T
< L: case EvT4. Subgoal 6.1.17.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I3 Ev4 : matchInt V2 I4 Ev5 : I3 <= I4 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I3 M2 : matchInt V2 I4 L : I4 < I3 ============================ projedVal falseVal trueVal /\ O = O_T
< apply less_lesseq_flip_false to L Ev5. Subgoal 6.1.17.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.17.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.17.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.17.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.17.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.17.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 <= I4 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.18: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.18: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.18: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.18.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 I1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I1 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.18.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 I1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I1 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.18.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I1 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.18.1: Variables: EE EE_T FE FE_T O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I1 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I1 ============================ projedVal trueVal falseVal /\ O = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_unique to _ Ev3 M1. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I1 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I1 M2 : matchInt V2 I2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_unique to _ Ev4 M2. Subgoal 6.1.18.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I2 Ev4 : matchInt V2 I2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I2 EvT3 : matchInt V4 I2 EvT4 : I2 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I2 M2 : matchInt V2 I2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply EvT4 to _. Subgoal 6.1.18.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.18.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.18.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.18.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.18.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr1 _ EvT2. Subgoal 6.1.18.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V1 ============================ projedVal trueVal trueVal /\ O = O_T
< apply matchInt_matchTrue_exclusive to _ _ M. Subgoal 6.1.18.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.18.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.18.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.18.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.18.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal trueVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr1 _ EvT2. Subgoal 6.1.18.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V1 ============================ projedVal trueVal trueVal /\ O = O_T
< apply matchInt_matchFalse_exclusive to _ _ M. Subgoal 6.1.18.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.18.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.18.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.18.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.18.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr1 _ EvT2. Subgoal 6.1.18.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_matchTrue_exclusive to _ _ M. Subgoal 6.1.18.6: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.18.6: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.18.6: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.18.6: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.18.6: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr1 _ EvT2. Subgoal 6.1.18.6: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_matchFalse_exclusive to _ _ M. Subgoal 6.1.18.7: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.18.7: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.18.7: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.18.7: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.18.7: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal trueVal /\ O = O_T
< M: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.18.7: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchString V1 S ============================ projedVal trueVal trueVal /\ O = O_T
< apply matchInt_matchString_exclusive to _ _ M. Subgoal 6.1.18.8: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.18.8: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.18.8: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.18.8: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.18.8: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.18.8: Variables: EE EE_T FE FE_T O O_T V1 V2 I E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchString V1 S1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_matchString_exclusive to _ _ M. Subgoal 6.1.19: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.19: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.19: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M1: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I ============================ projedVal falseVal trueVal /\ O = O_T
< M2: apply projedVal_matchInt to Pr2 _ EvT3. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I M2 : matchInt V2 I ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_unique to _ Ev3 M1. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 V2 I2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I2 Ev5 : I = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I M2 : matchInt V2 I ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_unique to _ Ev4 M2. Subgoal 6.1.19.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : I = I -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V1 I M2 : matchInt V2 I ============================ projedVal falseVal trueVal /\ O = O_T
< apply Ev5 to _. Subgoal 6.1.19.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 = I4 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.19.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 = I4 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.19.2: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 = I4 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.19.2: Variables: EE EE_T FE FE_T O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 I3 I4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I3 EvT3 : matchInt V4 I4 EvT4 : I3 = I4 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.19.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.19.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.19.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.19.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.19.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr1 _ EvT2. Subgoal 6.1.19.3: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_matchTrue_exclusive to _ _ M. Subgoal 6.1.19.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.19.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.19.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.19.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.19.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr1 _ EvT2. Subgoal 6.1.19.4: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_matchFalse_exclusive to _ _ M. Subgoal 6.1.19.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.19.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.19.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.19.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.19.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal falseVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr1 _ EvT2. Subgoal 6.1.19.5: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V1 ============================ projedVal falseVal falseVal /\ O = O_T
< apply matchInt_matchTrue_exclusive to _ _ M. Subgoal 6.1.19.6: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.19.6: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.19.6: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.19.6: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.19.6: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr1 _ EvT2. Subgoal 6.1.19.6: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V1 ============================ projedVal falseVal falseVal /\ O = O_T
< apply matchInt_matchFalse_exclusive to _ _ M. Subgoal 6.1.19.7: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.19.7: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.19.7: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.19.7: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.19.7: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.19.7: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchString V1 S ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_matchString_exclusive to _ _ M. Subgoal 6.1.19.8: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.19.8: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.19.8: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.19.8: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.19.8: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal falseVal /\ O = O_T
< M: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.19.8: Variables: EE EE_T FE FE_T O O_T V1 V2 I1 I2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchString V1 S1 ============================ projedVal falseVal falseVal /\ O = O_T
< apply matchInt_matchString_exclusive to _ _ M. Subgoal 6.1.20: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.20: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.20: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.20.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.20.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.20.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.20.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.20.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal trueVal /\ O = O_T
< M: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.20.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchInt V1 I ============================ projedVal trueVal trueVal /\ O = O_T
< apply matchInt_matchTrue_exclusive to _ M _. Subgoal 6.1.20.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.20.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.20.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.20.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.20.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.20.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchInt V1 I1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_matchTrue_exclusive to _ M _. Subgoal 6.1.20.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.20.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.20.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.20.3: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.20.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.20.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.20.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.20.4: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.20.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.20.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.20.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.20.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.20.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr2 _ EvT3. Subgoal 6.1.20.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.20.6: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.20.6: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.20.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.20.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.20.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr1 _ EvT2. Subgoal 6.1.20.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.20.7: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.20.7: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.20.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.20.7: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.20.8: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.20.8: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.20.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.20.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.20.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.20.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchString V1 S1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchString_matchTrue_exclusive to _ M _. Subgoal 6.1.21: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.21: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.21: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.21.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.21.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.21.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.21.1: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.21.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.21.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.21.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.21.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.21.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.21.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchInt V1 I1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_matchFalse_exclusive to _ M _. Subgoal 6.1.21.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.21.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.21.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.21.3: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.21.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.21.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.21.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.21.4: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.21.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.21.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.21.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.21.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.21.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr1 _ EvT2. Subgoal 6.1.21.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.21.6: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.21.6: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.21.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.21.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.21.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr2 _ EvT3. Subgoal 6.1.21.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.21.7: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.21.7: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.21.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.21.7: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.21.8: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.21.8: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.21.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.21.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.21.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.21.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchString V1 S1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchString_matchFalse_exclusive to _ M _. Subgoal 6.1.22: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.22: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.22: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.22.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.22.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.22.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.22.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.22.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.22.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchInt V1 I ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_matchTrue_exclusive to _ M _. Subgoal 6.1.22.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.22.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.22.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT5. Subgoal 6.1.22.2: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.22.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.22.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.22.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.22.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.22.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr2 _ EvT3. Subgoal 6.1.22.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V2 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.22.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.22.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.22.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.22.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.22.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr1 _ EvT2. Subgoal 6.1.22.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.22.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.22.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.22.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.22.5: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.22.6: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.22.6: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.22.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.22.6: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.22.7: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.22.7: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.22.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.22.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.22.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.22.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchString V1 S ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchString_matchTrue_exclusive to _ M _. Subgoal 6.1.22.8: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.22.8: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.22.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT5. Subgoal 6.1.22.8: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.23: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.23: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.23: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.23.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.23.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.23.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.23.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.23.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.23.1: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchInt V1 I ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_matchFalse_exclusive to _ M _. Subgoal 6.1.23.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.23.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.23.2: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT5. Subgoal 6.1.23.2: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.23.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.23.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.23.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.23.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.23.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr1 _ EvT2. Subgoal 6.1.23.3: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.1.23.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.23.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.23.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.23.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.23.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr2 _ EvT3. Subgoal 6.1.23.4: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V2 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.1.23.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.23.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.23.5: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.23.5: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.23.6: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.23.6: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.23.6: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.23.6: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.23.7: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.23.7: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.23.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.23.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.23.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.23.7: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchString V1 S ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchString_matchFalse_exclusive to _ M _. Subgoal 6.1.23.8: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.23.8: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.23.8: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev5 EvT5. Subgoal 6.1.23.8: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.24: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O ============================ projedVal trueVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.24: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal trueVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.24: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal trueVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.24.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.24.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.24.1: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.24.1: Variables: EE EE_T FE FE_T O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.24.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.24.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.24.2: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.24.2: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.24.2: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.24.2: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchInt V1 I1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchInt_matchString_exclusive to _ M _. Subgoal 6.1.24.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.24.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.24.3: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.24.3: Variables: EE EE_T FE FE_T O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.24.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.24.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.24.4: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.24.4: Variables: EE EE_T FE FE_T O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.24.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.24.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.24.5: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.24.5: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.24.5: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr1 _ EvT2. Subgoal 6.1.24.5: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchString_matchTrue_exclusive to _ _ M. Subgoal 6.1.24.6: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.24.6: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.24.6: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.24.6: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.24.6: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr1 _ EvT2. Subgoal 6.1.24.6: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchString_matchFalse_exclusive to _ _ M. Subgoal 6.1.24.7: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S1 EvT4 : O1 ++ O4 = O_T ============================ projedVal trueVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.24.7: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S1 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.24.7: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S1 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.24.7: Variables: EE EE_T FE FE_T O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S1 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal trueVal /\ O_T = O_T
< search. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal trueVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal trueVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal trueVal falseVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal trueVal falseVal /\ O = O_T
< M1: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S1 ============================ projedVal trueVal falseVal /\ O = O_T
< M2: apply projedVal_matchString to Pr2 _ EvT3. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S1 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S2 EvT4 : S1 = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S1 M2 : matchString V2 S2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchString_unique to _ M1 Ev3. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S2 EvT4 : S = S2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S M2 : matchString V2 S2 ============================ projedVal trueVal falseVal /\ O = O_T
< apply matchString_unique to _ M2 Ev4. Subgoal 6.1.24.8: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : S = S -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S M2 : matchString V2 S ============================ projedVal trueVal falseVal /\ O = O_T
< apply EvT4 to _. Subgoal 6.1.25: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O ============================ projedVal falseVal V_T /\ O = O_T
< case IsE. Subgoal 6.1.25: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal falseVal V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.25: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal falseVal V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.25.1: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.25.1: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.25.1: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.25.1: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.25.1: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchInt to Pr1 _ EvT2. Subgoal 6.1.25.1: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I EvT3 : matchInt V4 I EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchInt V1 I ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchInt_matchString_exclusive to _ M _. Subgoal 6.1.25.2: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.25.2: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.25.2: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.25.2: Variables: EE EE_T FE FE_T O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 I1 I2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchInt V3 I1 EvT3 : matchInt V4 I2 EvT4 : I1 = I2 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.25.3: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.25.3: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.25.3: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.25.3: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.25.3: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchTrue to Pr1 _ EvT2. Subgoal 6.1.25.3: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchTrue V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchString_matchTrue_exclusive to _ _ M. Subgoal 6.1.25.4: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.25.4: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.25.4: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.25.4: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.25.4: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M: apply projedVal_matchFalse to Pr1 _ EvT2. Subgoal 6.1.25.4: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M : matchFalse V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchString_matchFalse_exclusive to _ _ M. Subgoal 6.1.25.5: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.25.5: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.25.5: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev6 EvT4. Subgoal 6.1.25.5: Variables: EE EE_T FE FE_T O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchTrue V3 EvT3 : matchFalse V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.25.6: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.25.6: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.25.6: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev6 EvT4. Subgoal 6.1.25.6: Variables: EE EE_T FE FE_T O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchFalse V3 EvT3 : matchTrue V4 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T ============================ projedVal falseVal trueVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal trueVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal falseVal trueVal /\ O = O_T
< M1: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S ============================ projedVal falseVal trueVal /\ O = O_T
< M2: apply projedVal_matchString to Pr2 _ EvT3. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S EvT3 : matchString V4 S EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S M2 : matchString V2 S ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchString_unique to _ M1 Ev3. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S1 EvT3 : matchString V4 S1 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S1 M2 : matchString V2 S1 ============================ projedVal falseVal trueVal /\ O = O_T
< apply matchString_unique to _ M2 Ev4. Subgoal 6.1.25.7: Variables: EE EE_T FE FE_T O O_T V1 V2 S2 E2 E1 E21 E11 V3 O1 V4 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S2 Ev4 : matchString V2 S2 Ev5 : S2 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S2 EvT3 : matchString V4 S2 EvT4 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S2 M2 : matchString V2 S2 ============================ projedVal falseVal trueVal /\ O = O_T
< apply Ev5 to _. Subgoal 6.1.25.8: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S3 S4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S3 EvT3 : matchString V4 S4 EvT4 : S3 = S4 -> false EvT5 : O1 ++ O4 = O_T ============================ projedVal falseVal falseVal /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.25.8: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S3 S4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S3 EvT3 : matchString V4 S4 EvT4 : S3 = S4 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal falseVal falseVal /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.25.8: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S3 S4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S3 EvT3 : matchString V4 S4 EvT4 : S3 = S4 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.25.8: Variables: EE EE_T FE FE_T O_T V1 V2 S1 S2 E2 E1 E21 E11 V3 O1 V4 O4 S3 S4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S3 EvT3 : matchString V4 S4 EvT4 : S3 = S4 -> false EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal falseVal falseVal /\ O_T = O_T
< search. Subgoal 6.1.26: Variables: T EE EE_T FE FE_T V_T O_T S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (stringLit S) T Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @ EvT : evalExpr FE_T EE_T T V_T O_T ============================ projedVal (stringVal S) V_T /\ [] = O_T
< case Trans. Subgoal 6.1.26: Variables: EE EE_T FE FE_T V_T O_T S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @ EvT : evalExpr FE_T EE_T (stringLit S) V_T O_T ============================ projedVal (stringVal S) V_T /\ [] = O_T
< case EvT. Subgoal 6.1.26: Variables: EE EE_T FE FE_T S IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @ ============================ projedVal (stringVal S) (stringVal S) /\ [] = []
< search. Subgoal 6.1.27: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 S E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (appString E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O ============================ projedVal (stringVal S) V_T /\ O = O_T
< case IsE. Subgoal 6.1.27: Variables: T EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 S E2 E1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ projedVal (stringVal S) V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.27: Variables: EE EE_T FE FE_T V_T O O_T V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ EvT : evalExpr FE_T EE_T (appString E11 E21) V_T O_T Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ projedVal (stringVal S) V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< Pr1: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 O3 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< Pr2: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< M1: apply projedVal_matchString to Pr1 _ EvT2. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S4 ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< M2: apply projedVal_matchString to Pr2 _ EvT3. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 S1 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S4 M2 : matchString V2 S5 ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< apply matchString_unique to _ Ev3 M1. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 S2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S4 Ev4 : matchString V2 S2 Ev5 : S4 ++ S2 = S Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S4 M2 : matchString V2 S5 ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< apply matchString_unique to _ Ev4 M2. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 S E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S4 Ev4 : matchString V2 S5 Ev5 : S4 ++ S5 = S Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S4 M2 : matchString V2 S5 ============================ projedVal (stringVal S) (stringVal S3) /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S3) O @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S4 Ev4 : matchString V2 S5 Ev5 : S4 ++ S5 = S3 Ev6 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S4 M2 : matchString V2 S5 ============================ projedVal (stringVal S3) (stringVal S3) /\ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.1.27: Variables: EE EE_T FE FE_T O_T V1 V2 E2 E1 E21 E11 V3 O1 V4 O4 S4 S5 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S3) O_T @ Ev1 : evalExpr FE EE E1 V1 O1 * Ev2 : evalExpr FE EE E2 V2 O4 * Ev3 : matchString V1 S4 Ev4 : matchString V2 S5 Ev5 : S4 ++ S5 = S3 Ev6 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvT : evalExpr FE_T EE_T E11 V3 O1 EvT1 : evalExpr FE_T EE_T E21 V4 O4 EvT2 : matchString V3 S4 EvT3 : matchString V4 S5 EvT4 : S4 ++ S5 = S3 EvT5 : O1 ++ O4 = O_T Pr1 : projedVal V1 V3 Pr2 : projedVal V2 V4 H3 : is_value V1 H4 : is_value V2 M1 : matchString V1 S4 M2 : matchString V2 S5 ============================ projedVal (stringVal S3) (stringVal S3) /\ O_T = O_T
< search. Subgoal 6.1.28: Variables: T EE EE_T FE FE_T V V_T O_T X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (name X) T Ev : evalExpr FE EE (name X) V [] @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : lookupScopes X EE V ============================ projedVal V V_T /\ [] = O_T
< case IsE. Subgoal 6.1.28: Variables: T EE EE_T FE FE_T V V_T O_T X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (name X) T Ev : evalExpr FE EE (name X) V [] @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : lookupScopes X EE V H1 : is_string X ============================ projedVal V V_T /\ [] = O_T
< case Trans. Subgoal 6.1.28: Variables: EE EE_T FE FE_T V V_T O_T X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (name X) V [] @ EvT : evalExpr FE_T EE_T (name X) V_T O_T Ev1 : lookupScopes X EE V H1 : is_string X ============================ projedVal V V_T /\ [] = O_T
< EvT: case EvT. Subgoal 6.1.28: Variables: EE EE_T FE FE_T V V_T X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (name X) V [] @ Ev1 : lookupScopes X EE V H1 : is_string X EvT : lookupScopes X EE_T V_T ============================ projedVal V V_T /\ [] = []
< apply projedCtxs_lookupScopes to _ _ _ PC Ev1 EvT. Subgoal 6.1.28: Variables: EE EE_T FE FE_T V V_T X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (name X) V [] @ Ev1 : lookupScopes X EE V H1 : is_string X EvT : lookupScopes X EE_T V_T H2 : projedVal V V_T ============================ projedVal V V_T /\ [] = []
< search. Subgoal 6.1.29: Variables: T EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (call Fun Args) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V ============================ projedVal V V_T /\ O = O_T
< case IsE. Subgoal 6.1.29: Variables: T EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args ============================ projedVal V V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ EvT : evalExpr FE_T EE_T (call Fun A1) V_T O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 ============================ projedVal V V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames1 ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar1 EE1 V_T ============================ projedVal V V_T /\ O = O_T
< R: case RFE (keep). Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames1 ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar1 EE1 V_T R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ projedVal V V_T /\ O = O_T
< L_T: apply R to Ev1. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames1 ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar1 EE1 V_T R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names L_T : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) L_T1 : transS [RetVar::ArgNames] Body Body_T Names ============================ projedVal V V_T /\ O = O_T
< apply lookup_unique to EvT L_T. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names L_T : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) L_T1 : transS [RetVar::ArgNames] Body Body_T Names ============================ projedVal V V_T /\ O = O_T
< clear L_T R R1. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names ============================ projedVal V V_T /\ O = O_T
< apply IH_A to _ _ _ _ _ _ _ Trans Ev2 EvT1. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 ============================ projedVal V V_T /\ O = O_T
< apply evalArgs_isValue to _ _ _ Ev2. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals ============================ projedVal V V_T /\ O = O_T
< apply transA_is to _ Trans. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 ============================ projedVal V V_T /\ O = O_T
< apply evalArgs_isValue to _ _ _ EvT1. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 ============================ projedVal V V_T /\ O = O_T
< IsP: apply lookup_is_value_funCtx to _ Ev1. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body))) ============================ projedVal V V_T /\ O = O_T
< IsP: case IsP. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body)) ============================ projedVal V V_T /\ O = O_T
< IsP: case IsP1. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body) ============================ projedVal V V_T /\ O = O_T
< IsP: case IsP2. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body ============================ projedVal V V_T /\ O = O_T
< Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1). Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) ============================ projedVal V V_T /\ O = O_T
< Z': assert zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv). Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) ============================ projedVal V V_T /\ O = O_T
< apply zip_ctx_names to Z. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] ============================ projedVal V V_T /\ O = O_T
< apply zip_ctx_names to Z'. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] ============================ projedVal V V_T /\ O = O_T
< apply zip_projedArgs to _ Z' Z. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] ============================ projedVal V V_T /\ O = O_T
< apply zip_is to _ _ Z. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) ============================ projedVal V V_T /\ O = O_T
< apply zip_is to _ _ Z'. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) ============================ projedVal V V_T /\ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ L_T1 Ev4 EvT3. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 * Ev5 : O1 ++ O4 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) ============================ projedVal V V_T /\ O = O_T
< PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ L_T1 Ev4 EvT3. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 * Ev5 : O1 ++ O4 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) PC' : projedCtxs EE2 EE1 ============================ projedVal V V_T /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) PC' : projedCtxs EE2 EE1 ============================ projedVal V V_T /\ O_T = O_T
< apply evalStmt_isCtx to _ _ _ Ev4. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) PC' : projedCtxs EE2 EE1 H12 : is_list (is_list (is_pair is_string is_value)) EE2 ============================ projedVal V V_T /\ O_T = O_T
< apply transS_is to _ _ L_T1. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) PC' : projedCtxs EE2 EE1 H12 : is_list (is_list (is_pair is_string is_value)) EE2 H13 : is_stmt Body_T ============================ projedVal V V_T /\ O_T = O_T
< apply evalStmt_isCtx to _ _ _ EvT3. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) PC' : projedCtxs EE2 EE1 H12 : is_list (is_list (is_pair is_string is_value)) EE2 H13 : is_stmt Body_T H14 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ projedVal V V_T /\ O_T = O_T
< apply projedCtxs_lookupScopes to _ _ _ PC' Ev6 EvT5. Subgoal 6.1.29: Variables: EE EE_T FE FE_T V V_T O_T RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O1 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names H3 : projedArgs ArgVals ArgVals1 H4 : is_list is_value ArgVals H5 : is_args A1 H6 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) Z' : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H7 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] H8 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H9 : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1] H10 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv1) H11 : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) PC' : projedCtxs EE2 EE1 H12 : is_list (is_list (is_pair is_string is_value)) EE2 H13 : is_stmt Body_T H14 : is_list (is_list (is_pair is_string is_value)) EE1 H15 : projedVal V V_T ============================ projedVal V V_T /\ O_T = O_T
< search. Subgoal 6.1.30: Variables: T EE EE_T FE FE_T V_T O O_T VF RF IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (recBuild RF) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalRecFields FE EE RF VF O * ============================ projedVal (recVal VF) V_T /\ O = O_T
< case IsE. Subgoal 6.1.30: Variables: T EE EE_T FE FE_T V_T O O_T VF RF IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalRecFields FE EE RF VF O * H1 : is_recFieldExprs RF ============================ projedVal (recVal VF) V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.30: Variables: EE EE_T FE FE_T V_T O O_T VF RF RF2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @ EvT : evalExpr FE_T EE_T (recBuild RF2) V_T O_T Ev1 : evalRecFields FE EE RF VF O * H1 : is_recFieldExprs RF Trans : transRF RF RF2 ============================ projedVal (recVal VF) V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.30: Variables: EE EE_T FE FE_T O O_T VF RF RF2 VF1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @ Ev1 : evalRecFields FE EE RF VF O * H1 : is_recFieldExprs RF Trans : transRF RF RF2 EvT : evalRecFields FE_T EE_T RF2 VF1 O_T ============================ projedVal (recVal VF) (recVal VF1) /\ O = O_T
< apply IH_RF to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.30: Variables: EE EE_T FE FE_T O_T VF RF RF2 VF1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O_T @ Ev1 : evalRecFields FE EE RF VF O_T * H1 : is_recFieldExprs RF Trans : transRF RF RF2 EvT : evalRecFields FE_T EE_T RF2 VF1 O_T H2 : projedFields VF VF1 ============================ projedVal (recVal VF) (recVal VF1) /\ O_T = O_T
< search. Subgoal 6.1.31: Variables: T EE EE_T FE FE_T V V_T O O_T VR Fields F Rec IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr (recFieldAccess Rec F) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V ============================ projedVal V V_T /\ O = O_T
< case IsE. Subgoal 6.1.31: Variables: T EE EE_T FE FE_T V V_T O O_T VR Fields F Rec IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F ============================ projedVal V V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.31: Variables: EE EE_T FE FE_T V V_T O O_T VR Fields F Rec E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ EvT : evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O_T Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 ============================ projedVal V V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.1.31: Variables: EE EE_T FE FE_T V V_T O O_T VR Fields F Rec E2 VR1 Fields1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvT : evalExpr FE_T EE_T E2 VR1 O_T EvT1 : matchRec VR1 Fields1 EvT2 : lookup Fields1 F V_T ============================ projedVal V V_T /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.1.31: Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @ Ev1 : evalExpr FE EE Rec VR O_T * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvT : evalExpr FE_T EE_T E2 VR1 O_T EvT1 : matchRec VR1 Fields1 EvT2 : lookup Fields1 F V_T Pr : projedVal VR VR1 ============================ projedVal V V_T /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.1.31: Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @ Ev1 : evalExpr FE EE Rec VR O_T * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvT : evalExpr FE_T EE_T E2 VR1 O_T EvT1 : matchRec VR1 Fields1 EvT2 : lookup Fields1 F V_T Pr : projedVal VR VR1 H3 : is_value VR ============================ projedVal V V_T /\ O_T = O_T
< M: apply projedVal_matchRec to Pr _ EvT1. Subgoal 6.1.31: Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1 Fs' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @ Ev1 : evalExpr FE EE Rec VR O_T * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvT : evalExpr FE_T EE_T E2 VR1 O_T EvT1 : matchRec VR1 Fields1 EvT2 : lookup Fields1 F V_T Pr : projedVal VR VR1 H3 : is_value VR M : matchRec VR Fs' M1 : projedFields Fs' Fields1 ============================ projedVal V V_T /\ O_T = O_T
< apply matchRec_unique to _ M Ev2. Subgoal 6.1.31: Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @ Ev1 : evalExpr FE EE Rec VR O_T * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvT : evalExpr FE_T EE_T E2 VR1 O_T EvT1 : matchRec VR1 Fields1 EvT2 : lookup Fields1 F V_T Pr : projedVal VR VR1 H3 : is_value VR M : matchRec VR Fields M1 : projedFields Fields Fields1 ============================ projedVal V V_T /\ O_T = O_T
< apply projedFields_lookup to M1 Ev3 EvT2. Subgoal 6.1.31: Variables: EE EE_T FE FE_T V V_T O_T VR Fields F Rec E2 VR1 Fields1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O_T @ Ev1 : evalExpr FE EE Rec VR O_T * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvT : evalExpr FE_T EE_T E2 VR1 O_T EvT1 : matchRec VR1 Fields1 EvT2 : lookup Fields1 F V_T Pr : projedVal VR VR1 H3 : is_value VR M : matchRec VR Fields M1 : projedFields Fields Fields1 H4 : projedVal V V_T ============================ projedVal V V_T /\ O_T = O_T
< search. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P O_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE <unknown K evalExpr> T Ev : evalExpr FE EE <unknown K evalExpr> V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * ============================ projedVal V V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P O_P E_P1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * Trans : |{expr}- <unknown K evalExpr> ~~> E_P1 Trans1 : transE E_P1 T ============================ projedVal V V_T /\ O = O_T
< apply proj_expr_is to Ev1 _. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P O_P E_P1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * Trans : |{expr}- <unknown K evalExpr> ~~> E_P1 Trans1 : transE E_P1 T H1 : is_expr E_P ============================ projedVal V V_T /\ O = O_T
< apply proj_expr_unique to Trans Ev1 _. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P O_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P ============================ projedVal V V_T /\ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev2 EvT. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_T * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P Pr : projedVal V_P V_T ============================ projedVal V V_T /\ O = O_T
< Ev': apply proj_evalExpr_forward to Ev1 _ _ _ Ev. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O O_T E_P V_P V' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_T * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P Pr : projedVal V_P V_T Ev' : evalExpr FE EE E_P V' O Ev'1 : projedVal V V' ============================ projedVal V V_T /\ O = O_T
< apply evalExpr_unique to _ _ _ Ev' Ev2. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O_T @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_T * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P Pr : projedVal V_P V_T Ev' : evalExpr FE EE E_P V_P O_T Ev'1 : projedVal V V_P ============================ projedVal V V_T /\ O_T = O_T
< apply transE_is to _ Trans1. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O_T @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_T * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P Pr : projedVal V_P V_T Ev' : evalExpr FE EE E_P V_P O_T Ev'1 : projedVal V V_P H2 : is_expr T ============================ projedVal V V_T /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ EvT. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O_T @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_T * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P Pr : projedVal V_P V_T Ev' : evalExpr FE EE E_P V_P O_T Ev'1 : projedVal V V_P H2 : is_expr T H3 : is_value V_T ============================ projedVal V V_T /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O_T @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_T * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P Pr : projedVal V_P V_T Ev' : evalExpr FE EE E_P V_P O_T Ev'1 : projedVal V V_P H2 : is_expr T H3 : is_value V_T H4 : is_value V_P ============================ projedVal V V_T /\ O_T = O_T
< apply evalExpr_isValue to _ _ _ Ev. Subgoal 6.1.32: Variables: T EE EE_T FE FE_T V V_T O_T E_P V_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O_T @ EvT : evalExpr FE_T EE_T T V_T O_T Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_T * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P Pr : projedVal V_P V_T Ev' : evalExpr FE EE E_P V_P O_T Ev'1 : projedVal V V_P H2 : is_expr T H3 : is_value V_T H4 : is_value V_P H5 : is_value V ============================ projedVal V V_T /\ O_T = O_T
< search. Subgoal 6.2.1: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names noop T Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ EvT : evalStmt FE_T EE_T T EE_T' O_T ============================ [] = O_T
< case Trans. Subgoal 6.2.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ EvT : evalStmt FE_T EE_T noop EE_T' O_T ============================ [] = O_T
< case EvT. Subgoal 6.2.1: Variables: Names' Scope EE FE FE_T EE_T' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ [] = []
< search. Subgoal 6.2.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O ============================ O = O_T
< case IsS. Subgoal 6.2.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T (seq S11 S21) EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 ============================ O = O_T
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ O = O_T
< apply transS_is to _ _ Trans. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 ============================ O = O_T
< apply transS_isNames to _ _ Trans. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 ============================ O = O_T
< apply evalStmt_isCtx to _ _ _ EvT. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ O = O_T
< C: apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 6.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names3 ============================ O = O_T
< case Ctxs. Subgoal 6.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 BRest B IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names3 H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ O = O_T
< apply transS_old_scopes to _ _ Trans. Subgoal 6.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ O = O_T
< case C (keep). Subgoal 6.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 * Ev2 : evalStmt FE (A::ARest) S2 EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 6.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O_T @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 * Ev2 : evalStmt FE (A::ARest) S2 EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ O_T = O_T
< search. Subgoal 6.2.3: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * ============================ O = O_T
< case IsS. Subgoal 6.2.3: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.3: Variables: Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty Names1 Scope1 E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ EvT : evalStmt FE_T EE_T (declare Ty X E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.3: Variables: Scope EE FE FE_T O O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (Scope2::EE1) Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.3: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (Scope2::EE1) Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T H4 : projedVal V V1 ============================ O_T = O_T
< search. Subgoal 6.2.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' ============================ O = O_T
< case IsS. Subgoal 6.2.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T (assign X E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X E2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : replaceScopes X V1 EE_T EE_T' ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V E X E2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : replaceScopes X V1 EE_T EE_T' H3 : projedVal V V1 ============================ O_T = O_T
< search. Subgoal 6.2.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (recUpdate Rec Fields E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' ============================ O = O_T
< case IsS. Subgoal 6.2.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 ============================ O_T = O_T
< search. Subgoal 6.2.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O ============================ O = O_T
< case IsS. Subgoal 6.2.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 ============================ O = O_T
< apply transE_is to _ Trans. Subgoal 6.2.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 ============================ O = O_T
< apply ctx_names_add_scope to Ctxs. Subgoal 6.2.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 H6 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ O = O_T
< apply projedCtxs_add_scope to PC. Subgoal 6.2.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.2.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O4 * Ev4 : O1 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 6.2.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O4 * Ev4 : O1 ++ O4 = O_T H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O_T = O_T
< search. Subgoal 6.2.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 H4 : is_value V ============================ O = O_T
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.2.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 H4 : is_value V M : matchFalse V ============================ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.2.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O ============================ O = O_T
< case IsS. Subgoal 6.2.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 H4 : is_value V ============================ O = O_T
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.2.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 H4 : is_value V M : matchTrue V ============================ O = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.2.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 ============================ O = O_T
< apply transE_is to _ Trans. Subgoal 6.2.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 ============================ O = O_T
< apply ctx_names_add_scope to Ctxs. Subgoal 6.2.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 H6 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ O = O_T
< apply projedCtxs_add_scope to PC. Subgoal 6.2.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2. Subgoal 6.2.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O4 * Ev4 : O1 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 6.2.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O4 * Ev4 : O1 ++ O4 = O_T H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : projedVal V V1 H5 : is_expr Cond2 H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O_T = O_T
< search. Subgoal 6.2.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O ============================ O = O_T
< case IsS. Subgoal 6.2.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body ============================ O = O_T
< Trans: case Trans (keep). Subgoal 6.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans1 Ev1 EvT. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 ============================ O = O_T
< apply transE_is to _ Trans1. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 ============================ O = O_T
< apply ctx_names_add_scope to Ctxs. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ O = O_T
< apply projedCtxs_add_scope to PC. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O = O_T
< PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC' : projedCtxs (Scope1::EE3) (Scope2::EE1) ============================ O = O_T
< case PC'. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 ============================ O = O_T
< IsEE4+: apply evalStmt_isCtx to _ _ _ Ev3. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE3) ============================ O = O_T
< case IsEE4+. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ O = O_T
< apply transS_is to _ _ Trans2. Subgoal 6.2.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) EE3 H13 : is_stmt Body2 ============================ O = O_T
< case Ctxs. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) EE3 H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest ============================ O = O_T
< IsEE3+: apply evalStmt_isCtx to _ _ _ EvT2. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) EE3 H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) ============================ O = O_T
< case IsEE3+. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) EE3 H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest H17 : is_list (is_pair is_string is_value) Scope2 H18 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ O = O_T
< apply transS_old_scopes to _ _ Trans2. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) EE3 H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest H17 : is_list (is_pair is_string is_value) Scope2 H18 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ O = O_T
< C'': apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev3. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) EE3 H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest H17 : is_list (is_pair is_string is_value) Scope2 H18 : is_list (is_list (is_pair is_string is_value)) EE1 C'' : ctx_names (Scope1::EE3) (Scope'::(B::BRest)) ============================ O = O_T
< C'': case C''. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 EE3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O5 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE3 EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) EE3 H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest H17 : is_list (is_pair is_string is_value) Scope2 H18 : is_list (is_list (is_pair is_string is_value)) EE1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE3 (B::BRest) ============================ O = O_T
< case C''2 (keep). Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O5 * Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs (A::ARest) EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest H17 : is_list (is_pair is_string is_value) Scope2 H18 : is_list (is_list (is_pair is_string is_value)) EE1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A::ARest) (B::BRest) H19 : forall K I, mem (K, I) A -> mem K B H20 : forall K, mem K B -> exists I, mem (K, I) A H21 : ctx_names ARest BRest ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev4 EvT3. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O5 * Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O6 * Ev5 : O1 ++ O5 = O12 Ev6 : O12 ++ O6 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs (A::ARest) EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest H17 : is_list (is_pair is_string is_value) Scope2 H18 : is_list (is_list (is_pair is_string is_value)) EE1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A::ARest) (B::BRest) H19 : forall K I, mem (K, I) A -> mem K B H20 : forall K, mem K B -> exists I, mem (K, I) A H21 : ctx_names ARest BRest ============================ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O5 * Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O6 * Ev5 : O1 ++ O5 = O7 Ev6 : O7 ++ O6 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs (A::ARest) EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest H17 : is_list (is_pair is_string is_value) Scope2 H18 : is_list (is_list (is_pair is_string is_value)) EE1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A::ARest) (B::BRest) H19 : forall K I, mem (K, I) A -> mem K B H20 : forall K, mem K B -> exists I, mem (K, I) A H21 : ctx_names ARest BRest ============================ O = O_T
< apply append_unique to Ev6 EvT5. Subgoal 6.2.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O_T V Scope1 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::(A::ARest)) O5 * Ev4 : evalStmt FE (A::ARest) (while Cond Body) EE' O6 * Ev5 : O1 ++ O5 = O7 Ev6 : O7 ++ O6 = O_T H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : projedVal V V1 H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::(B::BRest)) H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs (A::ARest) EE1 H11 : is_list (is_pair is_string is_value) Scope1 H12 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H13 : is_stmt Body2 H14 : forall K I, mem (K, I) Scope -> mem K B H15 : forall K, mem K B -> exists I, mem (K, I) Scope H16 : ctx_names EE BRest H17 : is_list (is_pair is_string is_value) Scope2 H18 : is_list (is_list (is_pair is_string is_value)) EE1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A::ARest) (B::BRest) H19 : forall K I, mem (K, I) A -> mem K B H20 : forall K, mem K B -> exists I, mem (K, I) A H21 : ctx_names ARest BRest ============================ O_T = O_T
< search. Subgoal 6.2.8.2: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev1 EvT. Subgoal 6.2.8.2: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O_T * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O_T ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 Pr : projedVal V V1 ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.8.2: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O_T * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O_T ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 Pr : projedVal V V1 H3 : is_value V ============================ O = O_T
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.2.8.2: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O_T * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O_T ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 Pr : projedVal V V1 H3 : is_value V M : matchFalse V ============================ O = O_T
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.2.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V ============================ O = O_T
< case IsS. Subgoal 6.2.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.9: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.9.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O2 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3 EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4 EvT4 : O2 ++ O3 = O12 EvT5 : O12 ++ O4 = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.9.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O2 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3 EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4 EvT4 : O2 ++ O3 = O12 EvT5 : O12 ++ O4 = O_T Pr : projedVal V V1 ============================ O2 = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.9.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O2 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3 EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4 EvT4 : O2 ++ O3 = O12 EvT5 : O12 ++ O4 = O_T Pr : projedVal V V1 H3 : is_value V ============================ O2 = O_T
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.2.9.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O2 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3 EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4 EvT4 : O2 ++ O3 = O12 EvT5 : O12 ++ O4 = O_T Pr : projedVal V V1 H3 : is_value V M : matchTrue V ============================ O2 = O_T
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.2.9.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.9.2: Variables: Names' Scope EE FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) Cond V O_T * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 H3 : projedVal V V1 ============================ O_T = O_T
< search. Subgoal 6.2.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * ============================ O = O_T
< case IsS. Subgoal 6.2.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T (scopeStmt S3) EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T ============================ O = O_T
< apply ctx_names_add_scope to Ctxs. Subgoal 6.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ O = O_T
< apply projedCtxs_add_scope to PC. Subgoal 6.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') H3 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O_T @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O_T * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') H3 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ O_T = O_T
< search. Subgoal 6.2.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O ============================ O = O_T
< case IsS. Subgoal 6.2.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.11: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.11.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 I1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1 EvT1 : O1 ++ [intVal I1] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.11.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 I1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1 EvT1 : O1 ++ [intVal I1] = O_T Pr : projedVal (intVal I) (intVal I1) ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.11.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 I1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1 EvT1 : O1 ++ [intVal I1] = O_T Pr : projedVal (intVal I) (intVal I1) H2 : is_value (intVal I) ============================ O = O_T
< M: apply projedVal_matchInt to Pr _ _. Subgoal 6.2.11.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 I1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1 EvT1 : O1 ++ [intVal I1] = O_T Pr : projedVal (intVal I) (intVal I1) H2 : is_value (intVal I) M : matchInt (intVal I) I1 ============================ O = O_T
< M: case M. Subgoal 6.2.11.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I1) O1 * Ev2 : O1 ++ [intVal I1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1 EvT1 : O1 ++ [intVal I1] = O_T Pr : projedVal (intVal I1) (intVal I1) H2 : is_value (intVal I1) ============================ O = O_T
< apply append_unique to Ev2 EvT1. Subgoal 6.2.11.1: Variables: Names' Scope EE FE FE_T EE_T' O_T E E2 I1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E (intVal I1) O1 * Ev2 : O1 ++ [intVal I1] = O_T H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1 EvT1 : O1 ++ [intVal I1] = O_T Pr : projedVal (intVal I1) (intVal I1) H2 : is_value (intVal I1) ============================ O_T = O_T
< search. Subgoal 6.2.11.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.11.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal (intVal I) trueVal ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.11.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal (intVal I) trueVal H2 : is_value (intVal I) ============================ O = O_T
< M: apply matchInt_projedVal to Pr _ _. Subgoal 6.2.11.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal (intVal I) trueVal H2 : is_value (intVal I) M : matchInt trueVal I ============================ O = O_T
< case M. Subgoal 6.2.11.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.11.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal (intVal I) falseVal ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.11.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal (intVal I) falseVal H2 : is_value (intVal I) ============================ O = O_T
< M: apply matchInt_projedVal to Pr _ _. Subgoal 6.2.11.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal (intVal I) falseVal H2 : is_value (intVal I) M : matchInt falseVal I ============================ O = O_T
< case M. Subgoal 6.2.11.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.11.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal (intVal I) (stringVal S1) ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.11.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal (intVal I) (stringVal S1) H2 : is_value (intVal I) ============================ O = O_T
< M: apply matchInt_projedVal to Pr _ _. Subgoal 6.2.11.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T I E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O1 * Ev2 : O1 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal (intVal I) (stringVal S1) H2 : is_value (intVal I) M : matchInt (stringVal S1) I ============================ O = O_T
< case M. Subgoal 6.2.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O ============================ O = O_T
< case IsS. Subgoal 6.2.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.12: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.12.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.12.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal trueVal (intVal I) ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.12.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal trueVal (intVal I) H2 : is_value trueVal ============================ O = O_T
< M: apply matchTrue_projedVal to Pr _ _. Subgoal 6.2.12.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal trueVal (intVal I) H2 : is_value trueVal M : matchTrue (intVal I) ============================ O = O_T
< case M. Subgoal 6.2.12.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.12.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal trueVal trueVal ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.12.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal trueVal trueVal H2 : is_value trueVal ============================ O = O_T
< apply append_unique to Ev2 EvT1. Subgoal 6.2.12.2: Variables: Names' Scope EE FE FE_T EE_T' O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O_T H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal trueVal trueVal H2 : is_value trueVal ============================ O_T = O_T
< search. Subgoal 6.2.12.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.12.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal trueVal falseVal ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.12.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal trueVal falseVal H2 : is_value trueVal ============================ O = O_T
< M: apply matchTrue_projedVal to Pr _ _. Subgoal 6.2.12.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal trueVal falseVal H2 : is_value trueVal M : matchTrue falseVal ============================ O = O_T
< case M. Subgoal 6.2.12.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.12.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal trueVal (stringVal S1) ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.12.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal trueVal (stringVal S1) H2 : is_value trueVal ============================ O = O_T
< M: apply matchTrue_projedVal to Pr _ _. Subgoal 6.2.12.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal trueVal (stringVal S1) H2 : is_value trueVal M : matchTrue (stringVal S1) ============================ O = O_T
< case M. Subgoal 6.2.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O ============================ O = O_T
< case IsS. Subgoal 6.2.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.13: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.13.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.13.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal falseVal (intVal I) ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.13.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal falseVal (intVal I) H2 : is_value falseVal ============================ O = O_T
< M: apply matchFalse_projedVal to Pr _ _. Subgoal 6.2.13.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal falseVal (intVal I) H2 : is_value falseVal M : matchFalse (intVal I) ============================ O = O_T
< case M. Subgoal 6.2.13.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.13.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal falseVal trueVal ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.13.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal falseVal trueVal H2 : is_value falseVal ============================ O = O_T
< M: apply matchFalse_projedVal to Pr _ _. Subgoal 6.2.13.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal falseVal trueVal H2 : is_value falseVal M : matchFalse trueVal ============================ O = O_T
< case M. Subgoal 6.2.13.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.13.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal falseVal falseVal ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.13.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal falseVal falseVal H2 : is_value falseVal ============================ O = O_T
< apply append_unique to Ev2 EvT1. Subgoal 6.2.13.3: Variables: Names' Scope EE FE FE_T EE_T' O_T E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O_T H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal falseVal falseVal H2 : is_value falseVal ============================ O_T = O_T
< search. Subgoal 6.2.13.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.13.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal falseVal (stringVal S1) ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.13.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal falseVal (stringVal S1) H2 : is_value falseVal ============================ O = O_T
< M: apply matchFalse_projedVal to Pr _ _. Subgoal 6.2.13.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T Pr : projedVal falseVal (stringVal S1) H2 : is_value falseVal M : matchFalse (stringVal S1) ============================ O = O_T
< case M. Subgoal 6.2.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O ============================ O = O_T
< case IsS. Subgoal 6.2.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.14: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 6.2.14.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.14.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal (stringVal S1) (intVal I) ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.14.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal (stringVal S1) (intVal I) H2 : is_value (stringVal S1) ============================ O = O_T
< M: apply matchString_projedVal to Pr _ _. Subgoal 6.2.14.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T Pr : projedVal (stringVal S1) (intVal I) H2 : is_value (stringVal S1) M : matchString (intVal I) S1 ============================ O = O_T
< case M. Subgoal 6.2.14.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.14.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal (stringVal S1) trueVal ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.14.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal (stringVal S1) trueVal H2 : is_value (stringVal S1) ============================ O = O_T
< M: apply matchString_projedVal to Pr _ _. Subgoal 6.2.14.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T Pr : projedVal (stringVal S1) trueVal H2 : is_value (stringVal S1) M : matchString trueVal S1 ============================ O = O_T
< case M. Subgoal 6.2.14.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.14.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal (stringVal S1) falseVal ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.14.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal (stringVal S1) falseVal H2 : is_value (stringVal S1) ============================ O = O_T
< M: apply matchString_projedVal to Pr _ _. Subgoal 6.2.14.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T Pr : projedVal (stringVal S1) falseVal H2 : is_value (stringVal S1) M : matchString falseVal S1 ============================ O = O_T
< case M. Subgoal 6.2.14.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 S2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1 EvT1 : O1 ++ [stringVal S2] = O_T ============================ O = O_T
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.2.14.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 S2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1 EvT1 : O1 ++ [stringVal S2] = O_T Pr : projedVal (stringVal S1) (stringVal S2) ============================ O = O_T
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.2.14.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 S2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1 EvT1 : O1 ++ [stringVal S2] = O_T Pr : projedVal (stringVal S1) (stringVal S2) H2 : is_value (stringVal S1) ============================ O = O_T
< M: apply projedVal_matchString to Pr _ _. Subgoal 6.2.14.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 E E2 S2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O1 * Ev2 : O1 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1 EvT1 : O1 ++ [stringVal S2] = O_T Pr : projedVal (stringVal S1) (stringVal S2) H2 : is_value (stringVal S1) M : matchString (stringVal S1) S2 ============================ O = O_T
< M: case M. Subgoal 6.2.14.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T E E2 S2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S2) O1 * Ev2 : O1 ++ [stringVal S2] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1 EvT1 : O1 ++ [stringVal S2] = O_T Pr : projedVal (stringVal S2) (stringVal S2) H2 : is_value (stringVal S2) ============================ O = O_T
< apply append_unique to Ev2 EvT1. Subgoal 6.2.14.4: Variables: Names' Scope EE FE FE_T EE_T' O_T E E2 S2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S2) O1 * Ev2 : O1 ++ [stringVal S2] = O_T H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1 EvT1 : O1 ++ [stringVal S2] = O_T Pr : projedVal (stringVal S2) (stringVal S2) H2 : is_value (stringVal S2) ============================ O_T = O_T
< search. Subgoal 6.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * ============================ O = O_T
< Trans: case Trans. Subgoal 6.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' ============================ O = O_T
< apply names_is to _ Ev1. Subgoal 6.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string Names1 ============================ O = O_T
< apply proj_stmt_is to Ev2 _ _. Subgoal 6.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ O = O_T
< apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 6.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT. Subgoal 6.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P N IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ O = O_T
< Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 6.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P N EE'' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P Ev' : evalStmt FE (Scope::EE) S_P EE'' O Ev'1 : scopes_same EE' EE'' ============================ O = O_T
< apply evalStmt_unique to _ _ _ Ev' Ev3. Subgoal 6.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P N IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_T @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P Ev' : evalStmt FE (Scope::EE) S_P EE_P O_T Ev'1 : scopes_same EE' EE_P ============================ O_T = O_T
< search. Subgoal 6.3.1: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names noop T Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ EvT : evalStmt FE_T EE_T T EE_T' O_T ============================ projedCtxs (Scope::EE) EE_T'
< case Trans. Subgoal 6.3.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ EvT : evalStmt FE_T EE_T noop EE_T' O_T ============================ projedCtxs (Scope::EE) EE_T'
< case EvT. Subgoal 6.3.1: Variables: Names' Scope EE FE FE_T EE_T' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O ============================ projedCtxs EE' EE_T'
< case IsS. Subgoal 6.3.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 ============================ projedCtxs EE' EE_T'
< Trans: case Trans. Subgoal 6.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T (seq S11 S21) EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' ============================ projedCtxs EE' EE_T'
< EvT: case EvT. Subgoal 6.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ projedCtxs EE' EE_T'
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 ============================ projedCtxs EE' EE_T'
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 6.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ projedCtxs EE' EE_T'
< apply transS_is to _ _ Trans. Subgoal 6.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 ============================ projedCtxs EE' EE_T'
< apply transS_isNames to _ _ Trans. Subgoal 6.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 ============================ projedCtxs EE' EE_T'
< apply evalStmt_isCtx to _ _ _ EvT. Subgoal 6.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ projedCtxs EE' EE_T'
< C: apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 6.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names3 ============================ projedCtxs EE' EE_T'
< case Ctxs. Subgoal 6.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 BRest B IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names3 H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ projedCtxs EE' EE_T'
< apply transS_old_scopes to _ _ Trans. Subgoal 6.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ projedCtxs EE' EE_T'
< case C (keep). Subgoal 6.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ projedCtxs EE' EE_T'
< apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : projedCtxs (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : projedCtxs EE' EE_T' ============================ projedCtxs EE' EE_T'
< search. Subgoal 6.3.3: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * ============================ projedCtxs (((X, V)::Scope)::EE) EE_T'
< case IsS. Subgoal 6.3.3: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ projedCtxs (((X, V)::Scope)::EE) EE_T'
< Trans: case Trans. Subgoal 6.3.3: Variables: Scope EE EE_T FE FE_T EE_T' O O_T V X E Ty Names1 Scope1 E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ EvT : evalStmt FE_T EE_T (declare Ty X E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 ============================ projedCtxs (((X, V)::Scope)::EE) EE_T'
< EvT: case EvT. Subgoal 6.3.3: Variables: Scope EE FE FE_T O O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (Scope2::EE1) Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T ============================ projedCtxs (((X, V)::Scope)::EE) (((X, V1)::Scope2)::EE1)
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.3.3: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (Scope2::EE1) Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 ============================ projedCtxs (((X, V)::Scope)::EE) (((X, V1)::Scope2)::EE1)
< R: case PC. Subgoal 6.3.3: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 ============================ projedCtxs (((X, V)::Scope)::EE) (((X, V1)::Scope2)::EE1)
< unfold . Subgoal 6.3.3.1: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 ============================ forall X1 VB, lookup ((X, V1)::Scope2) X1 VB -> exists VA, lookup ((X, V)::Scope) X1 VA
< intros L. Subgoal 6.3.3.1: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 L : lookup ((X, V1)::Scope2) X1 VB ============================ exists VA, lookup ((X, V)::Scope) X1 VA
< L: case L. Subgoal 6.3.3.1.1: Variables: Scope EE FE FE_T O_T V E Ty Names1 Scope1 E2 EE1 Scope2 X1 VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X1 H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 VB O_T Pr : projedVal V VB R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 ============================ exists VA, lookup ((X1, V)::Scope) X1 VA
< search. Subgoal 6.3.3.1.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 L : X = X1 -> false L1 : lookup Scope2 X1 VB ============================ exists VA, lookup ((X, V)::Scope) X1 VA
< apply R to L1. Subgoal 6.3.3.1.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VB VA IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 L : X = X1 -> false L1 : lookup Scope2 X1 VB H4 : lookup Scope X1 VA ============================ exists VA, lookup ((X, V)::Scope) X1 VA
< search. Subgoal 6.3.3.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 ============================ forall X1 VA, lookup ((X, V)::Scope) X1 VA -> exists VB, lookup ((X, V1)::Scope2) X1 VB
< intros L. Subgoal 6.3.3.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 L : lookup ((X, V)::Scope) X1 VA ============================ exists VB, lookup ((X, V1)::Scope2) X1 VB
< L: case L. Subgoal 6.3.3.2.1: Variables: Scope EE FE FE_T O_T E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, VA)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E VA O_T * H1 : is_typ Ty H2 : is_string X1 H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal VA V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 ============================ exists VB, lookup ((X1, V1)::Scope2) X1 VB
< search. Subgoal 6.3.3.2.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 L : X = X1 -> false L1 : lookup Scope X1 VA ============================ exists VB, lookup ((X, V1)::Scope2) X1 VB
< apply R1 to L1. Subgoal 6.3.3.2.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 L : X = X1 -> false L1 : lookup Scope X1 VA H4 : lookup Scope2 X1 VB ============================ exists VB, lookup ((X, V1)::Scope2) X1 VB
< search. Subgoal 6.3.3.3: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 ============================ forall X1 VA VB, lookup ((X, V)::Scope) X1 VA -> lookup ((X, V1)::Scope2) X1 VB -> projedVal VA VB
< intros LA LB. Subgoal 6.3.3.3: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 LA : lookup ((X, V)::Scope) X1 VA LB : lookup ((X, V1)::Scope2) X1 VB ============================ projedVal VA VB
< LA: case LA. Subgoal 6.3.3.3.1: Variables: Scope EE FE FE_T O_T E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, VA)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E VA O_T * H1 : is_typ Ty H2 : is_string X1 H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal VA V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 LB : lookup ((X1, V1)::Scope2) X1 VB ============================ projedVal VA VB
< LB: case LB. Subgoal 6.3.3.3.1.1: Variables: Scope EE FE FE_T O_T E Ty Names1 Scope1 E2 EE1 Scope2 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, VA)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E VA O_T * H1 : is_typ Ty H2 : is_string X1 H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 VB O_T Pr : projedVal VA VB R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 ============================ projedVal VA VB
< search. Subgoal 6.3.3.3.1.2: Variables: Scope EE FE FE_T O_T E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, VA)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E VA O_T * H1 : is_typ Ty H2 : is_string X1 H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal VA V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 LB : X1 = X1 -> false LB1 : lookup Scope2 X1 VB ============================ projedVal VA VB
< apply LB to _. Subgoal 6.3.3.3.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 LB : lookup ((X, V1)::Scope2) X1 VB LA : X = X1 -> false LA1 : lookup Scope X1 VA ============================ projedVal VA VB
< LB: case LB. Subgoal 6.3.3.3.2.1: Variables: Scope EE FE FE_T O_T V E Ty Names1 Scope1 E2 EE1 Scope2 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X1 H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 VB O_T Pr : projedVal V VB R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 LA : X1 = X1 -> false LA1 : lookup Scope X1 VA ============================ projedVal VA VB
< apply LA to _. Subgoal 6.3.3.3.2.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 LA : X = X1 -> false LA1 : lookup Scope X1 VA LB : X = X1 -> false LB1 : lookup Scope2 X1 VB ============================ projedVal VA VB
< apply R2 to LA1 LB1. Subgoal 6.3.3.3.2.2: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 X1 VA VB IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 LA : X = X1 -> false LA1 : lookup Scope X1 VA LB : X = X1 -> false LB1 : lookup Scope2 X1 VB H4 : projedVal VA VB ============================ projedVal VA VB
< search. Subgoal 6.3.3.4: Variables: Scope EE FE FE_T O_T V X E Ty Names1 Scope1 E2 EE1 Scope2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T (Scope2::EE1) E2 V1 O_T Pr : projedVal V V1 R : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope X VA R1 : forall X VA, lookup Scope X VA -> exists VB, lookup Scope2 X VB R2 : forall X VA VB, lookup Scope X VA -> lookup Scope2 X VB -> projedVal VA VB R3 : projedCtxs EE EE1 ============================ projedCtxs EE EE1
< search. Subgoal 6.3.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' ============================ projedCtxs EE' EE_T'
< case IsS. Subgoal 6.3.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E ============================ projedCtxs EE' EE_T'
< Trans: case Trans. Subgoal 6.3.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T (assign X E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 ============================ projedCtxs EE' EE_T'
< EvT: case EvT. Subgoal 6.3.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V E X E2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : replaceScopes X V1 EE_T EE_T' ============================ projedCtxs EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.3.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V E X E2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : replaceScopes X V1 EE_T EE_T' H3 : projedVal V V1 ============================ projedCtxs EE' EE_T'
< apply transE_is to _ Trans. Subgoal 6.3.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V E X E2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : replaceScopes X V1 EE_T EE_T' H3 : projedVal V V1 H4 : is_expr E2 ============================ projedCtxs EE' EE_T'
< apply projedCtxs_replaceScopes to _ _ _ _ _ Ev2 EvT1. Subgoal 6.3.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V E X E2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : replaceScopes X V1 EE_T EE_T' H3 : projedVal V V1 H4 : is_expr E2 H5 : projedCtxs EE' EE_T' ============================ projedCtxs EE' EE_T'
< search. Subgoal 6.3.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (recUpdate Rec Fields E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' ============================ projedCtxs EE' EE_T'
< case IsS. Subgoal 6.3.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E ============================ projedCtxs EE' EE_T'
< Trans: case Trans. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 ============================ projedCtxs EE' EE_T'
< EvT: case EvT. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' ============================ projedCtxs EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 ============================ projedCtxs EE' EE_T'
< apply transE_is to _ Trans. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 ============================ projedCtxs EE' EE_T'
< apply lookupScopes_is to _ Ev2. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV ============================ projedCtxs EE' EE_T'
< Pr: apply projedCtxs_lookupScopes to _ _ _ _ Ev2 EvT1. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV Pr : projedVal RV RV1 ============================ projedCtxs EE' EE_T'
< M: apply projedVal_matchRec to Pr _ EvT2. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV FieldVals NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV Pr : projedVal RV RV1 M : matchRec RV Fs' M1 : projedFields Fs' FieldVals1 ============================ projedCtxs EE' EE_T'
< apply matchRec_unique to _ Ev3 M. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV Fs' Ev4 : updateRecFields Fields V Fs' NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV Pr : projedVal RV RV1 M : matchRec RV Fs' M1 : projedFields Fs' FieldVals1 ============================ projedCtxs EE' EE_T'
< apply matchRec_is to _ M. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV Fs' Ev4 : updateRecFields Fields V Fs' NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV Pr : projedVal RV RV1 M : matchRec RV Fs' M1 : projedFields Fs' FieldVals1 H7 : is_list (is_pair is_string is_value) Fs' ============================ projedCtxs EE' EE_T'
< apply projedVal_is to _ Pr. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV Fs' Ev4 : updateRecFields Fields V Fs' NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV Pr : projedVal RV RV1 M : matchRec RV Fs' M1 : projedFields Fs' FieldVals1 H7 : is_list (is_pair is_string is_value) Fs' H8 : is_value RV1 ============================ projedCtxs EE' EE_T'
< apply matchRec_is to _ EvT2. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV Fs' Ev4 : updateRecFields Fields V Fs' NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV Pr : projedVal RV RV1 M : matchRec RV Fs' M1 : projedFields Fs' FieldVals1 H7 : is_list (is_pair is_string is_value) Fs' H8 : is_value RV1 H9 : is_list (is_pair is_string is_value) FieldVals1 ============================ projedCtxs EE' EE_T'
< apply projedFields_updateRecFields to _ _ M1 _ Ev4 EvT3. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV Fs' Ev4 : updateRecFields Fields V Fs' NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV Pr : projedVal RV RV1 M : matchRec RV Fs' M1 : projedFields Fs' FieldVals1 H7 : is_list (is_pair is_string is_value) Fs' H8 : is_value RV1 H9 : is_list (is_pair is_string is_value) FieldVals1 H10 : projedFields NewVals NewVals1 ============================ projedCtxs EE' EE_T'
< apply projedCtxs_replaceScopes to _ _ _ _ _ Ev5 EvT4. Subgoal 6.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T V RV NewVals E Fields Rec E2 V1 RV1 FieldVals1 NewVals1 Fs' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V O_T * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV Fs' Ev4 : updateRecFields Fields V Fs' NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T E2 V1 O_T EvT1 : lookupScopes Rec EE_T RV1 EvT2 : matchRec RV1 FieldVals1 EvT3 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT4 : replaceScopes Rec (recVal NewVals1) EE_T EE_T' H4 : projedVal V V1 H5 : is_expr E2 H6 : is_value RV Pr : projedVal RV RV1 M : matchRec RV Fs' M1 : projedFields Fs' FieldVals1 H7 : is_list (is_pair is_string is_value) Fs' H8 : is_value RV1 H9 : is_list (is_pair is_string is_value) FieldVals1 H10 : projedFields NewVals NewVals1 H11 : projedCtxs EE' EE_T' ============================ projedCtxs EE' EE_T'
< search. Subgoal 6.3.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O ============================ projedCtxs EE' EE_T'
< case IsS. Subgoal 6.3.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ projedCtxs EE' EE_T'
< Trans: case Trans. Subgoal 6.3.6: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ projedCtxs EE' EE_T'
< EvT: case EvT. Subgoal 6.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T ============================ projedCtxs EE' EE_T'
< apply transE_is to _ Trans. Subgoal 6.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 ============================ projedCtxs EE' EE_T'
< apply ctx_names_add_scope to Ctxs. Subgoal 6.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ projedCtxs EE' EE_T'
< apply projedCtxs_add_scope to PC. Subgoal 6.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ projedCtxs EE' EE_T'
< PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans1 Ev3 EvT2. Subgoal 6.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC' : projedCtxs (Scope1::EE') (Scope2::EE_T') ============================ projedCtxs EE' EE_T'
< case PC'. Subgoal 6.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE' EE_T' ============================ projedCtxs EE' EE_T'
< search. Subgoal 6.3.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T ============================ projedCtxs EE' EE_T'
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.3.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 ============================ projedCtxs EE' EE_T'
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.3.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 H4 : is_value V ============================ projedCtxs EE' EE_T'
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.3.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 H4 : is_value V M : matchFalse V ============================ projedCtxs EE' EE_T'
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.3.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O ============================ projedCtxs EE' EE_T'
< case IsS. Subgoal 6.3.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ projedCtxs EE' EE_T'
< Trans: case Trans. Subgoal 6.3.7: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ projedCtxs EE' EE_T'
< EvT: case EvT. Subgoal 6.3.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T ============================ projedCtxs EE' EE_T'
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.3.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 ============================ projedCtxs EE' EE_T'
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.3.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 H4 : is_value V ============================ projedCtxs EE' EE_T'
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.3.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O1 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Th2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T Pr : projedVal V V1 H4 : is_value V M : matchTrue V ============================ projedCtxs EE' EE_T'
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T ============================ projedCtxs EE' EE_T'
< apply transE_is to _ Trans. Subgoal 6.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 ============================ projedCtxs EE' EE_T'
< apply ctx_names_add_scope to Ctxs. Subgoal 6.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ projedCtxs EE' EE_T'
< apply projedCtxs_add_scope to PC. Subgoal 6.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ projedCtxs EE' EE_T'
< PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2. Subgoal 6.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC' : projedCtxs (Scope1::EE') (Scope2::EE_T') ============================ projedCtxs EE' EE_T'
< case PC'. Subgoal 6.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V1 O1 Scope2 O4 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchFalse V1 EvT2 : evalStmt FE_T ([]::EE_T) El2 (Scope2::EE_T') O4 EvT3 : O1 ++ O4 = O_T H4 : is_expr Cond2 H5 : ctx_names ([]::(Scope::EE)) ([]::Names') H6 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H7 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H8 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H9 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H10 : projedCtxs EE' EE_T' ============================ projedCtxs EE' EE_T'
< search. Subgoal 6.3.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O ============================ projedCtxs EE' EE_T'
< case IsS. Subgoal 6.3.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body ============================ projedCtxs EE' EE_T'
< Trans: case Trans (keep). Subgoal 6.3.8: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 ============================ projedCtxs EE' EE_T'
< EvT: case EvT. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T ============================ projedCtxs EE' EE_T'
< apply transE_is to _ Trans1. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 ============================ projedCtxs EE' EE_T'
< apply ctx_names_add_scope to Ctxs. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ projedCtxs EE' EE_T'
< PC+: apply projedCtxs_add_scope to PC. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ projedCtxs EE' EE_T'
< PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT2. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC' : projedCtxs (Scope1::EE3) (Scope2::EE1) ============================ projedCtxs EE' EE_T'
< PC'': case PC'. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE3 EE1 ============================ projedCtxs EE' EE_T'
< apply transS_is to _ _ Trans2. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE3 EE1 H5 : is_stmt Body2 ============================ projedCtxs EE' EE_T'
< IsEE3+: apply evalStmt_isCtx to _ _ _ Ev3. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE3 EE1 H5 : is_stmt Body2 IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE3) ============================ projedCtxs EE' EE_T'
< case IsEE3+. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE3 EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope1 H7 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ projedCtxs EE' EE_T'
< IsEE1+: apply evalStmt_isCtx to _ _ _ EvT2. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE3 EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope1 H7 : is_list (is_list (is_pair is_string is_value)) EE3 IsEE1+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE1) ============================ projedCtxs EE' EE_T'
< case IsEE1+. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE3 EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope1 H7 : is_list (is_list (is_pair is_string is_value)) EE3 H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ projedCtxs EE' EE_T'
< PC+: case PC+. Subgoal 6.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE3 EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope1 H7 : is_list (is_list (is_pair is_string is_value)) EE3 H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC+3 : projedCtxs (Scope::EE) EE_T ============================ projedCtxs EE' EE_T'
< case PC+3. Subgoal 6.3.8.1: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (B::BRest) Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA PC''1 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE3 EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope1 H7 : is_list (is_list (is_pair is_string is_value)) EE3 H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB H13 : projedCtxs EE BRest ============================ projedCtxs EE' EE_T'
< NS: apply evalStmt_names_same to _ _ _ Ev3. Subgoal 6.3.8.1: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' EE'' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (B::BRest) Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::EE'') O3 * Ev4 : evalStmt FE EE'' (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs EE'' EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope' H7 : is_list (is_list (is_pair is_string is_value)) EE'' H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB H13 : projedCtxs EE BRest NS : names_same (Scope::EE) EE'' ============================ projedCtxs EE' EE_T'
< case NS. Subgoal 6.3.8.1: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (B::BRest) Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 * Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs (B1::BRest1) EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope' H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB H13 : projedCtxs EE BRest H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1 H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope H16 : names_same EE BRest1 ============================ projedCtxs EE' EE_T'
< C: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev3. Subgoal 6.3.8.1: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (B::BRest) Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 * Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs (B1::BRest1) EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope' H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB H13 : projedCtxs EE BRest H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1 H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope H16 : names_same EE BRest1 C : ctx_names (Scope'::(B1::BRest1)) Names2 ============================ projedCtxs EE' EE_T'
< apply transS_old_scopes to _ _ Trans2. Subgoal 6.3.8.1: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1 Scope'1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (B::BRest) Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 * Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'1::Names') EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs (B1::BRest1) EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope' H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB H13 : projedCtxs EE BRest H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1 H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope H16 : names_same EE BRest1 C : ctx_names (Scope'::(B1::BRest1)) (Scope'1::Names') ============================ projedCtxs EE' EE_T'
< case C. Subgoal 6.3.8.1: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1 Scope'1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (B::BRest) Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 * Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'1::Names') EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs (B1::BRest1) EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope' H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB H13 : projedCtxs EE BRest H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1 H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope H16 : names_same EE BRest1 H17 : forall K I, mem (K, I) Scope' -> mem K Scope'1 H18 : forall K, mem K Scope'1 -> exists I, mem (K, I) Scope' H19 : ctx_names (B1::BRest1) Names' ============================ projedCtxs EE' EE_T'
< apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev4 EvT3. Subgoal 6.3.8.1: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 O3 O4 O12 Body Cond Body2 Cond2 V1 O1 Scope2 EE1 O5 O6 O7 BRest B Scope' BRest1 B1 Scope'1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) (B::BRest) Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B1::BRest1)) O3 * Ev4 : evalStmt FE (B1::BRest1) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'1::Names') EvT : evalExpr FE_T (B::BRest) Cond2 V1 O1 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::(B::BRest)) Body2 (Scope2::EE1) O5 EvT3 : evalStmt FE_T EE1 (while Cond2 Body2) EE_T' O6 EvT4 : O1 ++ O5 = O7 EvT5 : O7 ++ O6 = O_T H3 : is_expr Cond2 H4 : ctx_names ([]::(Scope::EE)) ([]::Names') PC'' : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope' X VA PC''1 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope2 X VB PC''2 : forall X VA VB, lookup Scope' X VA -> lookup Scope2 X VB -> projedVal VA VB PC''3 : projedCtxs (B1::BRest1) EE1 H5 : is_stmt Body2 H6 : is_list (is_pair is_string is_value) Scope' H7 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) H8 : is_list (is_pair is_string is_value) Scope2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 PC+ : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC+1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC+2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB H10 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA H11 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB H12 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB H13 : projedCtxs EE BRest H14 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B1 H15 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) Scope H16 : names_same EE BRest1 H17 : forall K I, mem (K, I) Scope' -> mem K Scope'1 H18 : forall K, mem K Scope'1 -> exists I, mem (K, I) Scope' H19 : ctx_names (B1::BRest1) Names' H20 : projedCtxs EE' EE_T' ============================ projedCtxs EE' EE_T'
< search. Subgoal 6.3.8.2: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 ============================ projedCtxs EE' EE_T'
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans1 Ev1 EvT. Subgoal 6.3.8.2: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O_T * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O_T ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 Pr : projedVal V V1 ============================ projedCtxs EE' EE_T'
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.3.8.2: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O_T * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O_T ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 Pr : projedVal V V1 H3 : is_value V ============================ projedCtxs EE' EE_T'
< M: apply projedVal_matchFalse to Pr _ EvT1. Subgoal 6.3.8.2: Variables: Names' Scope EE FE FE_T EE' EE_T' O O_T V Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O_T * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O_T ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 Pr : projedVal V V1 H3 : is_value V M : matchFalse V ============================ projedCtxs EE' EE_T'
< apply matchTrue_matchFalse_exclusive to _ _ M. Subgoal 6.3.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V ============================ projedCtxs (Scope::EE) EE_T'
< case IsS. Subgoal 6.3.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body ============================ projedCtxs (Scope::EE) EE_T'
< Trans: case Trans. Subgoal 6.3.9: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 ============================ projedCtxs (Scope::EE) EE_T'
< EvT: case EvT. Subgoal 6.3.9.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O2 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3 EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4 EvT4 : O2 ++ O3 = O12 EvT5 : O12 ++ O4 = O_T ============================ projedCtxs (Scope::EE) EE_T'
< Pr: apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.3.9.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O2 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3 EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4 EvT4 : O2 ++ O3 = O12 EvT5 : O12 ++ O4 = O_T Pr : projedVal V V1 ============================ projedCtxs (Scope::EE) EE_T'
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 6.3.9.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O2 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3 EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4 EvT4 : O2 ++ O3 = O12 EvT5 : O12 ++ O4 = O_T Pr : projedVal V V1 H3 : is_value V ============================ projedCtxs (Scope::EE) EE_T'
< M: apply projedVal_matchTrue to Pr _ EvT1. Subgoal 6.3.9.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T V Body Cond Names2 Body2 Cond2 V1 O2 Scope1 EE3 O3 O4 O12 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O2 @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 V1 O2 EvT1 : matchTrue V1 EvT2 : evalStmt FE_T ([]::EE_T) Body2 (Scope1::EE3) O3 EvT3 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O4 EvT4 : O2 ++ O3 = O12 EvT5 : O12 ++ O4 = O_T Pr : projedVal V V1 H3 : is_value V M : matchTrue V ============================ projedCtxs (Scope::EE) EE_T'
< apply matchTrue_matchFalse_exclusive to _ M _. Subgoal 6.3.9.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T V Body Cond Names2 Body2 Cond2 V1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T' Cond2 V1 O_T EvT1 : matchFalse V1 ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * ============================ projedCtxs EE' EE_T'
< case IsS. Subgoal 6.3.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 ============================ projedCtxs EE' EE_T'
< Trans: case Trans. Subgoal 6.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T (scopeStmt S3) EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 ============================ projedCtxs EE' EE_T'
< EvT: case EvT. Subgoal 6.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T ============================ projedCtxs EE' EE_T'
< apply ctx_names_add_scope to Ctxs. Subgoal 6.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ projedCtxs EE' EE_T'
< apply projedCtxs_add_scope to PC. Subgoal 6.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') H3 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ projedCtxs EE' EE_T'
< PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') H3 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) PC' : projedCtxs (Scope1::EE') (Scope2::EE_T') ============================ projedCtxs EE' EE_T'
< case PC'. Subgoal 6.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') H3 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) H4 : forall X VB, lookup Scope2 X VB -> exists VA, lookup Scope1 X VA H5 : forall X VA, lookup Scope1 X VA -> exists VB, lookup Scope2 X VB H6 : forall X VA VB, lookup Scope1 X VA -> lookup Scope2 X VB -> projedVal VA VB H7 : projedCtxs EE' EE_T' ============================ projedCtxs EE' EE_T'
< search. Subgoal 6.3.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O ============================ projedCtxs (Scope::EE) EE_T'
< case IsS. Subgoal 6.3.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E ============================ projedCtxs (Scope::EE) EE_T'
< Trans: case Trans. Subgoal 6.3.11: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T I O2 E E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 ============================ projedCtxs (Scope::EE) EE_T'
< EvT: case EvT. Subgoal 6.3.11.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 I1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I1) O1 EvT1 : O1 ++ [intVal I1] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.11.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.11.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.11.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T I O2 E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O ============================ projedCtxs (Scope::EE) EE_T'
< case IsS. Subgoal 6.3.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E ============================ projedCtxs (Scope::EE) EE_T'
< Trans: case Trans. Subgoal 6.3.12: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 ============================ projedCtxs (Scope::EE) EE_T'
< EvT: case EvT. Subgoal 6.3.12.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.12.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.12.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.12.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O ============================ projedCtxs (Scope::EE) EE_T'
< case IsS. Subgoal 6.3.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E ============================ projedCtxs (Scope::EE) EE_T'
< Trans: case Trans. Subgoal 6.3.13: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T O2 E E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 ============================ projedCtxs (Scope::EE) EE_T'
< EvT: case EvT. Subgoal 6.3.13.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.13.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.13.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.13.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T O2 E E2 S1 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S1) O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O ============================ projedCtxs (Scope::EE) EE_T'
< case IsS. Subgoal 6.3.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E ============================ projedCtxs (Scope::EE) EE_T'
< Trans: case Trans. Subgoal 6.3.14: Variables: Names' Scope EE EE_T FE FE_T EE_T' O O_T S1 O2 E E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 ============================ projedCtxs (Scope::EE) EE_T'
< EvT: case EvT. Subgoal 6.3.14.1: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 I O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (intVal I) O1 EvT1 : O1 ++ [intVal I] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.14.2: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 trueVal O1 EvT1 : O1 ++ [trueVal] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.14.3: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 falseVal O1 EvT1 : O1 ++ [falseVal] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.14.4: Variables: Names' Scope EE FE FE_T EE_T' O O_T S1 O2 E E2 S2 O1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvT : evalExpr FE_T EE_T' E2 (stringVal S2) O1 EvT1 : O1 ++ [stringVal S2] = O_T ============================ projedCtxs (Scope::EE) EE_T'
< search. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * ============================ projedCtxs EE' EE_T'
< Trans: case Trans. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' ============================ projedCtxs EE' EE_T'
< apply names_is to _ Ev1. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string Names1 ============================ projedCtxs EE' EE_T'
< apply proj_stmt_is to Ev2 _ _. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ projedCtxs EE' EE_T'
< apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ projedCtxs EE' EE_T'
< PC': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P PC' : projedCtxs EE_P EE_T' ============================ projedCtxs EE' EE_T'
< Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N EE'' IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P PC' : projedCtxs EE_P EE_T' Ev' : evalStmt FE (Scope::EE) S_P EE'' O Ev'1 : scopes_same EE' EE'' ============================ projedCtxs EE' EE_T'
< apply evalStmt_unique to _ _ _ Ev' Ev3. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P O_P N IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P PC' : projedCtxs EE_P EE_T' Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P Ev'1 : scopes_same EE' EE_P ============================ projedCtxs EE' EE_T'
< apply scopes_same_projedCtxs to Ev'1 PC'. Subgoal 6.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P O_P N IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P PC' : projedCtxs EE_P EE_T' Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P Ev'1 : scopes_same EE' EE_P H3 : projedCtxs EE' EE_T' ============================ projedCtxs EE' EE_T'
< search. Subgoal 6.4.1: Variables: T EE EE_T FE FE_T V_T O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA nilArgs T Ev : evalArgs FE EE nilArgs [] [] @ EvT : evalArgs FE_T EE_T T V_T O_T ============================ projedArgs [] V_T /\ [] = O_T
< case Trans. Subgoal 6.4.1: Variables: EE EE_T FE FE_T V_T O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE nilArgs [] [] @ EvT : evalArgs FE_T EE_T nilArgs V_T O_T ============================ projedArgs [] V_T /\ [] = O_T
< case EvT. Subgoal 6.4.1: Variables: EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE nilArgs [] [] @ ============================ projedArgs [] [] /\ [] = []
< search. Subgoal 6.4.2: Variables: T EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 Rest E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsA : is_args (consArgs E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ EvT : evalArgs FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O ============================ projedArgs (V1::VRest) V_T /\ O = O_T
< case IsA. Subgoal 6.4.2: Variables: T EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 Rest E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ EvT : evalArgs FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest ============================ projedArgs (V1::VRest) V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.4.2: Variables: EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 Rest E A2 E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ EvT : evalArgs FE_T EE_T (consArgs E2 A2) V_T O_T Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE E E2 Trans1 : transA Rest A2 ============================ projedArgs (V1::VRest) V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.4.2: Variables: EE EE_T FE FE_T O O_T O2 O3 VRest V1 Rest E A2 E2 O1 O4 VRest1 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE E E2 Trans1 : transA Rest A2 EvT : evalExpr FE_T EE_T E2 V2 O1 EvT1 : evalArgs FE_T EE_T A2 VRest1 O4 EvT2 : O1 ++ O4 = O_T ============================ projedArgs (V1::VRest) (V2::VRest1) /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.4.2: Variables: EE EE_T FE FE_T O O_T O3 VRest V1 Rest E A2 E2 O1 O4 VRest1 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ Ev1 : evalExpr FE EE E V1 O1 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE E E2 Trans1 : transA Rest A2 EvT : evalExpr FE_T EE_T E2 V2 O1 EvT1 : evalArgs FE_T EE_T A2 VRest1 O4 EvT2 : O1 ++ O4 = O_T H3 : projedVal V1 V2 ============================ projedArgs (V1::VRest) (V2::VRest1) /\ O = O_T
< apply IH_A to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.4.2: Variables: EE EE_T FE FE_T O O_T VRest V1 Rest E A2 E2 O1 O4 VRest1 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ Ev1 : evalExpr FE EE E V1 O1 * Ev2 : evalArgs FE EE Rest VRest O4 * Ev3 : O1 ++ O4 = O H1 : is_expr E H2 : is_args Rest Trans : transE E E2 Trans1 : transA Rest A2 EvT : evalExpr FE_T EE_T E2 V2 O1 EvT1 : evalArgs FE_T EE_T A2 VRest1 O4 EvT2 : O1 ++ O4 = O_T H3 : projedVal V1 V2 H4 : projedArgs VRest VRest1 ============================ projedArgs (V1::VRest) (V2::VRest1) /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 6.4.2: Variables: EE EE_T FE FE_T O_T VRest V1 Rest E A2 E2 O1 O4 VRest1 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O_T @ Ev1 : evalExpr FE EE E V1 O1 * Ev2 : evalArgs FE EE Rest VRest O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr E H2 : is_args Rest Trans : transE E E2 Trans1 : transA Rest A2 EvT : evalExpr FE_T EE_T E2 V2 O1 EvT1 : evalArgs FE_T EE_T A2 VRest1 O4 EvT2 : O1 ++ O4 = O_T H3 : projedVal V1 V2 H4 : projedArgs VRest VRest1 ============================ projedArgs (V1::VRest) (V2::VRest1) /\ O_T = O_T
< search. Subgoal 6.4.3: Variables: T EE EE_T FE FE_T V V_T O O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V O @ EvT : evalArgs FE_T EE_T T V_T O_T ============================ projedArgs V V_T /\ O = O_T
< Or: apply is_args_nilArgs_or_consArgs to IsA. Subgoal 6.4.3: Variables: T EE EE_T FE FE_T V V_T O O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V O @ EvT : evalArgs FE_T EE_T T V_T O_T Or : <unknown K evalArgs> = nilArgs \/ (exists E A', <unknown K evalArgs> = consArgs E A') ============================ projedArgs V V_T /\ O = O_T
< case Or. Subgoal 6.5.1: Variables: T EE EE_T FE FE_T V_T O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF nilRecFieldExprs T Ev : evalRecFields FE EE nilRecFieldExprs [] [] @ EvT : evalRecFields FE_T EE_T T V_T O_T ============================ projedFields [] V_T /\ [] = O_T
< case Trans. Subgoal 6.5.1: Variables: EE EE_T FE FE_T V_T O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE nilRecFieldExprs [] [] @ EvT : evalRecFields FE_T EE_T nilRecFieldExprs V_T O_T ============================ projedFields [] V_T /\ [] = O_T
< case EvT. Subgoal 6.5.1: Variables: EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE nilRecFieldExprs [] [] @ ============================ projedFields [] [] /\ [] = []
< search. Subgoal 6.5.2: Variables: T EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 F Rest E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsRF : is_recFieldExprs (consRecFieldExprs F E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ EvT : evalRecFields FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O ============================ projedFields ((F, V1)::VRest) V_T /\ O = O_T
< case IsRF. Subgoal 6.5.2: Variables: T EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 F Rest E IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ EvT : evalRecFields FE_T EE_T T V_T O_T Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest ============================ projedFields ((F, V1)::VRest) V_T /\ O = O_T
< Trans: case Trans. Subgoal 6.5.2: Variables: EE EE_T FE FE_T V_T O O_T O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ EvT : evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T O_T Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE E E2 Trans1 : transRF Rest RF2 ============================ projedFields ((F, V1)::VRest) V_T /\ O = O_T
< EvT: case EvT. Subgoal 6.5.2: Variables: EE EE_T FE FE_T O O_T O2 O3 VRest V1 F Rest E RF2 E2 O1 O4 VRest1 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE E E2 Trans1 : transRF Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 O1 EvT1 : evalRecFields FE_T EE_T RF2 VRest1 O4 EvT2 : O1 ++ O4 = O_T ============================ projedFields ((F, V1)::VRest) ((F, V2)::VRest1) /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 6.5.2: Variables: EE EE_T FE FE_T O O_T O3 VRest V1 F Rest E RF2 E2 O1 O4 VRest1 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ Ev1 : evalExpr FE EE E V1 O1 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O1 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE E E2 Trans1 : transRF Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 O1 EvT1 : evalRecFields FE_T EE_T RF2 VRest1 O4 EvT2 : O1 ++ O4 = O_T H4 : projedVal V1 V2 ============================ projedFields ((F, V1)::VRest) ((F, V2)::VRest1) /\ O = O_T
< apply IH_RF to _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 6.5.2: Variables: EE EE_T FE FE_T O O_T VRest V1 F Rest E RF2 E2 O1 O4 VRest1 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ Ev1 : evalExpr FE EE E V1 O1 * Ev2 : evalRecFields FE EE Rest VRest O4 * Ev3 : O1 ++ O4 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE E E2 Trans1 : transRF Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 O1 EvT1 : evalRecFields FE_T EE_T RF2 VRest1 O4 EvT2 : O1 ++ O4 = O_T H4 : projedVal V1 V2 H5 : projedFields VRest VRest1 ============================ projedFields ((F, V1)::VRest) ((F, V2)::VRest1) /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 6.5.2: Variables: EE EE_T FE FE_T O_T VRest V1 F Rest E RF2 E2 O1 O4 VRest1 V2 IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O_T @ Ev1 : evalExpr FE EE E V1 O1 * Ev2 : evalRecFields FE EE Rest VRest O4 * Ev3 : O1 ++ O4 = O_T H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE E E2 Trans1 : transRF Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 O1 EvT1 : evalRecFields FE_T EE_T RF2 VRest1 O4 EvT2 : O1 ++ O4 = O_T H4 : projedVal V1 V2 H5 : projedFields VRest VRest1 ============================ projedFields ((F, V1)::VRest) ((F, V2)::VRest1) /\ O_T = O_T
< search. Subgoal 6.5.3: Variables: T EE EE_T FE FE_T V V_T O O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V O @ EvT : evalRecFields FE_T EE_T T V_T O_T ============================ projedFields V V_T /\ O = O_T
< Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF. Subgoal 6.5.3: Variables: T EE EE_T FE FE_T V V_T O O_T IH_E : forall E T EE EE_T FE FE_T V V_T O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> evalExpr FE_T EE_T T V_T O_T -> projedVal V V_T /\ O = O_T IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> projedCtxs EE' EE_T' IH_A : forall A T EE EE_T FE FE_T V V_T O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> evalArgs FE_T EE_T T V_T O_T -> projedArgs V V_T /\ O = O_T IH_RF : forall RF T EE EE_T FE FE_T V V_T O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> evalRecFields FE_T EE_T T V_T O_T -> projedFields V V_T /\ O = O_T IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V O @ EvT : evalRecFields FE_T EE_T T V_T O_T Or : <unknown K evalRecFields> = nilRecFieldExprs \/ (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF') ============================ projedFields V V_T /\ O = O_T
< case Or. Proof completed.
< Theorem paramTys_paramNames : forall Ps PTys D PNs, paramTys Ps PTys -> domain PTys D -> paramNames Ps PNs -> D = PNs. ============================ forall Ps PTys D PNs, paramTys Ps PTys -> domain PTys D -> paramNames Ps PNs -> D = PNs
< induction on 1. IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs ============================ forall Ps PTys D PNs, paramTys Ps PTys @ -> domain PTys D -> paramNames Ps PNs -> D = PNs
< intros PT D PN. Variables: Ps PTys D PNs IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PT : paramTys Ps PTys @ D : domain PTys D PN : paramNames Ps PNs ============================ D = PNs
< PT: case PT. Subgoal 1: Variables: D PNs IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs D : domain [] D PN : paramNames [] PNs ============================ D = PNs
< case D. Subgoal 1: Variables: PNs IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PN : paramNames [] PNs ============================ [] = PNs
< case PN. Subgoal 1: IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs ============================ [] = []
< search. Subgoal 2: Variables: D PNs RestTys PTy PName Rest P IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs D : domain ((PName, PTy)::RestTys) D PN : paramNames (P::Rest) PNs PT : paramTy P PName PTy PT1 : paramTys Rest RestTys * ============================ D = PNs
< D: case D. Subgoal 2: Variables: PNs RestTys PTy PName Rest P DRest IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PN : paramNames (P::Rest) PNs PT : paramTy P PName PTy PT1 : paramTys Rest RestTys * D : domain RestTys DRest ============================ PName::DRest = PNs
< PN: case PN. Subgoal 2: Variables: RestTys PTy PName Rest P DRest NRest N IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PT : paramTy P PName PTy PT1 : paramTys Rest RestTys * D : domain RestTys DRest PN : paramName P N PN1 : paramNames Rest NRest ============================ PName::DRest = N::NRest
< apply IH to PT1 D PN1. Subgoal 2: Variables: RestTys PTy PName Rest P NRest N IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PT : paramTy P PName PTy PT1 : paramTys Rest RestTys * D : domain RestTys NRest PN : paramName P N PN1 : paramNames Rest NRest ============================ PName::NRest = N::NRest
< apply paramTy_paramName_same to PT PN. Subgoal 2: Variables: RestTys PTy Rest P NRest N IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PT : paramTy P N PTy PT1 : paramTys Rest RestTys * D : domain RestTys NRest PN : paramName P N PN1 : paramNames Rest NRest ============================ N::NRest = N::NRest
< search. Proof completed.
< Extensible_Theorem trans_getFunEvalInfo_rel : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, IsF : is_fun F -> Trans : transF F F_T -> GFEI : getFunEvalInfo F Name RetVar RVVal PNames Body -> GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N on Trans. Subgoal 1: Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun (fun F1 RetTy RetVar1 InitVal Params Body1) Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< case IsF. Subgoal 1: Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar1 H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body1 ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< G: case GFEI. Subgoal 1: Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params RetTy IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun Name RetTy RetVar RVVal Params Body) (fun Name RetTy RetVar RVVal Params Body2) @ GFEI_T : getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body2 Names1 H1 : is_string Name H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value RVVal H5 : is_list is_param Params H6 : is_stmt Body G : paramNames Params PNames ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< GT: case GFEI_T. Subgoal 1: Variables: PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Params RetTy IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar_T::Names] Body Body_T Names1 H1 : is_string Name_T H2 : is_typ RetTy H3 : is_string RetVar_T H4 : is_value RVVal_T H5 : is_list is_param Params H6 : is_stmt Body G : paramNames Params PNames GT : paramNames Params PNames_T ============================ exists N, (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar_T::PNames] Body Body_T N
< apply paramNames_unique to _ G GT. Subgoal 1: Variables: Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Params RetTy IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar_T::Names] Body Body_T Names1 H1 : is_string Name_T H2 : is_typ RetTy H3 : is_string RetVar_T H4 : is_value RVVal_T H5 : is_list is_param Params H6 : is_stmt Body G : paramNames Params PNames_T GT : paramNames Params PNames_T ============================ exists N, (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\ PNames_T = PNames_T) /\ transS [RetVar_T::PNames_T] Body Body_T N
< apply paramTys_paramNames to Trans1 Trans2 G. Subgoal 1: Variables: Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names1 Params RetTy IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @ Trans1 : paramTys Params PTys Trans2 : domain PTys PNames_T Trans3 : transS [RetVar_T::PNames_T] Body Body_T Names1 H1 : is_string Name_T H2 : is_typ RetTy H3 : is_string RetVar_T H4 : is_value RVVal_T H5 : is_list is_param Params H6 : is_stmt Body G : paramNames Params PNames_T GT : paramNames Params PNames_T ============================ exists N, (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\ PNames_T = PNames_T) /\ transS [RetVar_T::PNames_T] Body Body_T N
< search. Subgoal 2: Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< G': apply proj_getFunEvalInfo_forward to Trans1 _ GFEI. Subgoal 2: Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G' : getFunEvalInfo F_P Name RetVar RVVal PNames Body ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< apply proj_fun_is to Trans1 _. Subgoal 2: Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G' : getFunEvalInfo F_P Name RetVar RVVal PNames Body H1 : is_fun F_P ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< apply IH to _ Trans2 G' GFEI_T. Subgoal 2: Variables: Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P N IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name_T RetVar_T RVVal_T PNames_T Body GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G' : getFunEvalInfo F_P Name_T RetVar_T RVVal_T PNames_T Body H1 : is_fun F_P H2 : transS [RetVar_T::PNames_T] Body Body_T N ============================ exists N, (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\ PNames_T = PNames_T) /\ transS [RetVar_T::PNames_T] Body Body_T N
< search. Proof completed.
< Theorem trans_getFunEvalCtx_rel_FE : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T. ============================ forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T
< induction on 2. IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T ============================ forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T @ -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T
< intros IsFs Trans GFEI GFEI_T. Variables: Fs Fs_T FE FE_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun Fs Trans : transFuns Fs Fs_T @ GFEI : getFunEvalCtx Fs FE GFEI_T : getFunEvalCtx Fs_T FE_T ============================ rel_FE FE FE_T
< Trans: case Trans. Subgoal 1: Variables: FE FE_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] GFEI : getFunEvalCtx [] FE GFEI_T : getFunEvalCtx [] FE_T ============================ rel_FE FE FE_T
< case GFEI. Subgoal 1: Variables: FE_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] GFEI_T : getFunEvalCtx [] FE_T ============================ rel_FE [] FE_T
< case GFEI_T. Subgoal 1: IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] ============================ rel_FE [] []
< unfold . Subgoal 1.1: IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] ============================ forall F RetVar RVVal PNames Body, lookup [] F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup [] F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names
< intros L. Subgoal 1.1: Variables: F RetVar RVVal PNames Body IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] L : lookup [] F (RetVar, (RVVal, (PNames, Body))) ============================ exists Body_T Names, lookup [] F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names
< case L. Subgoal 1.2: IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] ============================ forall F RetVar RVVal PNames Body_T, lookup [] F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup [] F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names
< intros L. Subgoal 1.2: Variables: F RetVar RVVal PNames Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] L : lookup [] F (RetVar, (RVVal, (PNames, Body_T))) ============================ exists Body Names, lookup [] F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names
< case L. Subgoal 2: Variables: FE FE_T Rest1 F1 Rest F IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun (F::Rest) GFEI : getFunEvalCtx (F::Rest) FE GFEI_T : getFunEvalCtx (F1::Rest1) FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * ============================ rel_FE FE FE_T
< G: case GFEI. Subgoal 2: Variables: FE_T Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun (F::Rest) GFEI_T : getFunEvalCtx (F1::Rest1) FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest ============================ rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) FE_T
< GT: case GFEI_T. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun (F::Rest) Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 ============================ rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
< case IsFs. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest ============================ rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
< apply trans_getFunEvalInfo_rel to _ Trans G GT. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N ============================ rel_FE ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
< R: apply IH to _ Trans1 G1 GT1. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 ============================ rel_FE ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
< unfold . Subgoal 2.1: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 ============================ forall F RetVar RVVal PNames Body2, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F (RetVar, (RVVal, (PNames, Body2))) -> exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body2 Body_T Names
< intros L. Subgoal 2.1: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 L : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) ============================ exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< L: case L. Subgoal 2.1.1: Variables: Rest1 F1 Rest F CRest CRest1 Body1 N F2 RetVar2 RVVal2 PNames2 Body2 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F F2 RetVar2 RVVal2 PNames2 Body2 G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 F2 RetVar2 RVVal2 PNames2 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar2::PNames2] Body2 Body1 N R : rel_FE CRest CRest1 ============================ exists Body_T Names, lookup ((F2, (RetVar2, (RVVal2, (PNames2, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< search. Subgoal 2.1.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 L : FName1 = F2 -> false L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2))) ============================ exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< R: case R. Subgoal 2.1.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N L : FName1 = F2 -> false L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2))) R : forall F RetVar RVVal PNames Body, lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< apply R to L1. Subgoal 2.1.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 Body_T Names IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N L : FName1 = F2 -> false L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2))) R : forall F RetVar RVVal PNames Body, lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H4 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T))) H5 : transS [RetVar2::PNames2] Body2 Body_T Names ============================ exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< search. Subgoal 2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 ============================ forall F RetVar RVVal PNames Body_T, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F (RetVar, (RVVal, (PNames, Body2))) /\ transS [RetVar::PNames] Body2 Body_T Names
< intros L. Subgoal 2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 L : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) ============================ exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< L: case L. Subgoal 2.2.1: Variables: Rest1 F1 Rest F CRest Body CRest1 N F2 RetVar2 RVVal2 PNames2 Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F F2 RetVar2 RVVal2 PNames2 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 F2 RetVar2 RVVal2 PNames2 Body_T GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar2::PNames2] Body Body_T N R : rel_FE CRest CRest1 ============================ exists Body2 Names, lookup ((F2, (RetVar2, (RVVal2, (PNames2, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< search. Subgoal 2.2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 L : FName1 = F2 -> false L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T))) ============================ exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< R: case R. Subgoal 2.2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N L : FName1 = F2 -> false L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T))) R : forall F RetVar RVVal PNames Body, lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< apply R1 to L1. Subgoal 2.2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T Body2 Names IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N L : FName1 = F2 -> false L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T))) R : forall F RetVar RVVal PNames Body, lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H4 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2))) H5 : transS [RetVar2::PNames2] Body2 Body_T Names ============================ exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< search. Proof completed.
< Theorem projedCtxs_lookupScopes_exists_forward : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB. ============================ forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB
< induction on 4. IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB ============================ forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B @ -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB
< intros IsA IsB IsX PC L. Variables: A B X VA IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B @ L : lookupScopes X A VA ============================ exists VB, lookupScopes X B VB /\ projedVal VA VB
< LA: case L. Subgoal 1: Variables: B X VA Rest L IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs (L::Rest) B @ LA : lookup L X VA ============================ exists VB, lookupScopes X B VB /\ projedVal VA VB
< PC: case PC. Subgoal 1: Variables: X VA Rest L BRest B1 IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X LA : lookup L X VA PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< LB: apply PC1 to LA. Subgoal 1: Variables: X VA Rest L BRest B1 VB IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X LA : lookup L X VA PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * LB : lookup B1 X VB ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< apply PC2 to LA LB. Subgoal 1: Variables: X VA Rest L BRest B1 VB IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X LA : lookup L X VA PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * LB : lookup B1 X VB H1 : projedVal VA VB ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< search. Subgoal 2: Variables: B X VA Rest L IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs (L::Rest) B @ LA : no_lookup L X LA1 : lookupScopes X Rest VA ============================ exists VB, lookupScopes X B VB /\ projedVal VA VB
< case IsA. Subgoal 2: Variables: B X VA Rest L IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs (L::Rest) B @ LA : no_lookup L X LA1 : lookupScopes X Rest VA H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest ============================ exists VB, lookupScopes X B VB /\ projedVal VA VB
< PC: case PC. Subgoal 2: Variables: X VA Rest L BRest B1 IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X LA : no_lookup L X LA1 : lookupScopes X Rest VA H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< IsB: case IsB. Subgoal 2: Variables: X VA Rest L BRest B1 IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsX : is_string X LA : no_lookup L X LA1 : lookupScopes X Rest VA H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< apply IH to _ _ _ PC3 LA1. Subgoal 2: Variables: X VA Rest L BRest B1 VB IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsX : is_string X LA : no_lookup L X LA1 : lookupScopes X Rest VA H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : lookupScopes X BRest VB H4 : projedVal VA VB ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< Or: apply lookup_string_value_list_or_no to IsB IsX. Subgoal 2: Variables: X VA Rest L BRest B1 VB IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsX : is_string X LA : no_lookup L X LA1 : lookupScopes X Rest VA H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : lookupScopes X BRest VB H4 : projedVal VA VB Or : (exists V, lookup B1 X V) \/ no_lookup B1 X ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< LB: case Or. Subgoal 2.1: Variables: X VA Rest L BRest B1 VB V IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsX : is_string X LA : no_lookup L X LA1 : lookupScopes X Rest VA H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : lookupScopes X BRest VB H4 : projedVal VA VB LB : lookup B1 X V ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< LA': apply PC to LB. Subgoal 2.1: Variables: X VA Rest L BRest B1 VB V VA1 IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsX : is_string X LA : no_lookup L X LA1 : lookupScopes X Rest VA H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : lookupScopes X BRest VB H4 : projedVal VA VB LB : lookup B1 X V LA' : lookup L X VA1 ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< apply no_lookup to LA LA'. Subgoal 2.2: Variables: X VA Rest L BRest B1 VB IH : forall A B X VA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B * -> lookupScopes X A VA -> exists VB, lookupScopes X B VB /\ projedVal VA VB IsX : is_string X LA : no_lookup L X LA1 : lookupScopes X Rest VA H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest * IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : lookupScopes X BRest VB H4 : projedVal VA VB LB : no_lookup B1 X ============================ exists VB, lookupScopes X (B1::BRest) VB /\ projedVal VA VB
< search. Proof completed.
< Theorem projedArgs_zip [N] : forall A B (N : list N) Z, projedArgs A B -> zip N A Z -> exists Z', zip N B Z'. ============================ forall A B N Z, projedArgs A B -> zip N A Z -> exists Z', zip N B Z'
< induction on 1. IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z' ============================ forall A B N Z, projedArgs A B @ -> zip N A Z -> exists Z', zip N B Z'
< intros PA Z. Variables: A B N Z IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z' PA : projedArgs A B @ Z : zip N A Z ============================ exists Z', zip N B Z'
< PA: case PA. Subgoal 1: Variables: N Z IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z' Z : zip N [] Z ============================ exists Z', zip N [] Z'
< case Z. Subgoal 1: IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z' ============================ exists Z', zip [] [] Z'
< search. Subgoal 2: Variables: N Z BRest VB ARest VA IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z' Z : zip N (VA::ARest) Z PA : projedVal VA VB PA1 : projedArgs ARest BRest * ============================ exists Z', zip N (VB::BRest) Z'
< Z: case Z. Subgoal 2: Variables: BRest VB ARest VA Rest A1 ARest1 IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z' PA : projedVal VA VB PA1 : projedArgs ARest BRest * Z : zip ARest1 ARest Rest ============================ exists Z', zip (A1::ARest1) (VB::BRest) Z'
< apply IH to PA1 Z. Subgoal 2: Variables: BRest VB ARest VA Rest A1 ARest1 Z' IH : forall A B N Z, projedArgs A B * -> zip N A Z -> exists Z', zip N B Z' PA : projedVal VA VB PA1 : projedArgs ARest BRest * Z : zip ARest1 ARest Rest H1 : zip ARest1 BRest Z' ============================ exists Z', zip (A1::ARest1) (VB::BRest) Z'
< search. Proof completed.
< Theorem projedFields_lookup_exists : forall FA FB X VA, projedFields FA FB -> lookup FA X VA -> exists VB, lookup FB X VB /\ projedVal VA VB. ============================ forall FA FB X VA, projedFields FA FB -> lookup FA X VA -> exists VB, lookup FB X VB /\ projedVal VA VB
< induction on 2. IH : forall FA FB X VA, projedFields FA FB -> lookup FA X VA * -> exists VB, lookup FB X VB /\ projedVal VA VB ============================ forall FA FB X VA, projedFields FA FB -> lookup FA X VA @ -> exists VB, lookup FB X VB /\ projedVal VA VB
< intros PF L. Variables: FA FB X VA IH : forall FA FB X VA, projedFields FA FB -> lookup FA X VA * -> exists VB, lookup FB X VB /\ projedVal VA VB PF : projedFields FA FB L : lookup FA X VA @ ============================ exists VB, lookup FB X VB /\ projedVal VA VB
< L: case L. Subgoal 1: Variables: FB X VA Rest IH : forall FA FB X VA, projedFields FA FB -> lookup FA X VA * -> exists VB, lookup FB X VB /\ projedVal VA VB PF : projedFields ((X, VA)::Rest) FB ============================ exists VB, lookup FB X VB /\ projedVal VA VB
< case PF. Subgoal 1: Variables: X VA Rest BRest VB IH : forall FA FB X VA, projedFields FA FB -> lookup FA X VA * -> exists VB, lookup FB X VB /\ projedVal VA VB H1 : projedVal VA VB H2 : projedFields Rest BRest ============================ exists VB1, lookup ((X, VB)::BRest) X VB1 /\ projedVal VA VB1
< search. Subgoal 2: Variables: FB X VA Rest V K IH : forall FA FB X VA, projedFields FA FB -> lookup FA X VA * -> exists VB, lookup FB X VB /\ projedVal VA VB PF : projedFields ((K, V)::Rest) FB L : K = X -> false L1 : lookup Rest X VA * ============================ exists VB, lookup FB X VB /\ projedVal VA VB
< PF: case PF. Subgoal 2: Variables: X VA Rest V K BRest VB IH : forall FA FB X VA, projedFields FA FB -> lookup FA X VA * -> exists VB, lookup FB X VB /\ projedVal VA VB L : K = X -> false L1 : lookup Rest X VA * PF : projedVal V VB PF1 : projedFields Rest BRest ============================ exists VB1, lookup ((K, VB)::BRest) X VB1 /\ projedVal VA VB1
< apply IH to PF1 L1. Subgoal 2: Variables: X VA Rest V K BRest VB VB1 IH : forall FA FB X VA, projedFields FA FB -> lookup FA X VA * -> exists VB, lookup FB X VB /\ projedVal VA VB L : K = X -> false L1 : lookup Rest X VA * PF : projedVal V VB PF1 : projedFields Rest BRest H1 : lookup BRest X VB1 H2 : projedVal VA VB1 ============================ exists VB1, lookup ((K, VB)::BRest) X VB1 /\ projedVal VA VB1
< search. Proof completed.
< Theorem projedCtxs_replaceScopes_exists_forward : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB. ============================ forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
< induction on 6. IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB ============================ forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA @ -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
< intros IsA IsB IsX PC PV RA. Variables: A B X VA VB RA IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) A IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs A B PV : projedVal VA VB RA : replaceScopes X VA A RA @ ============================ exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB
< RA: case RA. Subgoal 1: Variables: B X VA VB I Rest LRemain L IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs (L::Rest) B PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain ============================ exists RB, replaceScopes X VB B RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
< case IsA. Subgoal 1: Variables: B X VA VB I Rest LRemain L IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs (L::Rest) B PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest ============================ exists RB, replaceScopes X VB B RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
< PC: case PC. Subgoal 1: Variables: X VA VB I Rest LRemain L BRest B1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
< LA: apply mem_lookup to _ RA. Subgoal 1: Variables: X VA VB I Rest LRemain L BRest B1 V' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
< LB: apply PC1 to LA. Subgoal 1: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
< MB: apply lookup_mem to LB. Subgoal 1: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
< IsB: case IsB. Subgoal 1: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
< RB: apply remove_all_exists to IsB IsX. Subgoal 1: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (((X, VA)::LRemain)::Rest) RB
< exists ((X, VB)::EE')::BRest. Subgoal 1: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' ============================ replaceScopes X VB (B1::BRest) (((X, VB)::EE')::BRest) /\ projedCtxs (((X, VA)::LRemain)::Rest) (((X, VB)::EE')::BRest)
< split. Subgoal 1.1: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' ============================ replaceScopes X VB (B1::BRest) (((X, VB)::EE')::BRest)
< search. Subgoal 1.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' ============================ projedCtxs (((X, VA)::LRemain)::Rest) (((X, VB)::EE')::BRest)
< unfold . Subgoal 1.2.1: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' ============================ forall X1 VB1, lookup ((X, VB)::EE') X1 VB1 -> exists VA1, lookup ((X, VA)::LRemain) X1 VA1
< intros LB'. Subgoal 1.2.1: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LB' : lookup ((X, VB)::EE') X1 VB2 ============================ exists VA1, lookup ((X, VA)::LRemain) X1 VA1
< LB': case LB'. Subgoal 1.2.1.1: Variables: VA I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA VB2 RA : mem (X1, I) L RA1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X1 V' LB : lookup B1 X1 VB1 MB : mem (X1, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X1 EE' ============================ exists VA1, lookup ((X1, VA)::LRemain) X1 VA1
< search. Subgoal 1.2.1.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LB' : X = X1 -> false LB'1 : lookup EE' X1 VB2 ============================ exists VA1, lookup ((X, VA)::LRemain) X1 VA1
< LB'': apply remove_all_lookup_other to RB LB'1 LB'. Subgoal 1.2.1.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LB' : X = X1 -> false LB'1 : lookup EE' X1 VB2 LB'' : lookup B1 X1 VB2 ============================ exists VA1, lookup ((X, VA)::LRemain) X1 VA1
< LA'': apply PC to LB''. Subgoal 1.2.1.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2 VA1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LB' : X = X1 -> false LB'1 : lookup EE' X1 VB2 LB'' : lookup B1 X1 VB2 LA'' : lookup L X1 VA1 ============================ exists VA1, lookup ((X, VA)::LRemain) X1 VA1
< LA': apply remove_all_lookup_other_back to RA1 LA'' _. Subgoal 1.2.1.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VB2 VA1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LB' : X = X1 -> false LB'1 : lookup EE' X1 VB2 LB'' : lookup B1 X1 VB2 LA'' : lookup L X1 VA1 LA' : lookup LRemain X1 VA1 ============================ exists VA1, lookup ((X, VA)::LRemain) X1 VA1
< search. Subgoal 1.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' ============================ forall X1 VA1, lookup ((X, VA)::LRemain) X1 VA1 -> exists VB1, lookup ((X, VB)::EE') X1 VB1
< intros LA'. Subgoal 1.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : lookup ((X, VA)::LRemain) X1 VA1 ============================ exists VB1, lookup ((X, VB)::EE') X1 VB1
< LA': case LA'. Subgoal 1.2.2.1: Variables: VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA1 VB RA : mem (X1, I) L RA1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X1 V' LB : lookup B1 X1 VB1 MB : mem (X1, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X1 EE' ============================ exists VB1, lookup ((X1, VB)::EE') X1 VB1
< search. Subgoal 1.2.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 ============================ exists VB1, lookup ((X, VB)::EE') X1 VB1
< LA'': apply remove_all_lookup_other to RA1 LA'1 _. Subgoal 1.2.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 LA'' : lookup L X1 VA1 ============================ exists VB1, lookup ((X, VB)::EE') X1 VB1
< LB'': apply PC1 to LA''. Subgoal 1.2.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 LA'' : lookup L X1 VA1 LB'' : lookup B1 X1 VB2 ============================ exists VB1, lookup ((X, VB)::EE') X1 VB1
< LB': apply remove_all_lookup_other_back to RB LB'' _. Subgoal 1.2.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 LA'' : lookup L X1 VA1 LB'' : lookup B1 X1 VB2 LB' : lookup EE' X1 VB2 ============================ exists VB1, lookup ((X, VB)::EE') X1 VB1
< search. Subgoal 1.2.3: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' ============================ forall X1 VA1 VB1, lookup ((X, VA)::LRemain) X1 VA1 -> lookup ((X, VB)::EE') X1 VB1 -> projedVal VA1 VB1
< intros LA' LB'. Subgoal 1.2.3: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : lookup ((X, VA)::LRemain) X1 VA1 LB' : lookup ((X, VB)::EE') X1 VB2 ============================ projedVal VA1 VB2
< LA': case LA'. Subgoal 1.2.3.1: Variables: VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA1 VB RA : mem (X1, I) L RA1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X1 V' LB : lookup B1 X1 VB1 MB : mem (X1, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X1 EE' LB' : lookup ((X1, VB)::EE') X1 VB2 ============================ projedVal VA1 VB2
< LB': case LB'. Subgoal 1.2.3.1.1: Variables: I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA1 VB2 RA : mem (X1, I) L RA1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X1 V' LB : lookup B1 X1 VB1 MB : mem (X1, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X1 EE' ============================ projedVal VA1 VB2
< search. Subgoal 1.2.3.1.2: Variables: VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA1 VB RA : mem (X1, I) L RA1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X1 V' LB : lookup B1 X1 VB1 MB : mem (X1, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X1 EE' LB' : X1 = X1 -> false LB'1 : lookup EE' X1 VB2 ============================ projedVal VA1 VB2
< apply LB' to _. Subgoal 1.2.3.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LB' : lookup ((X, VB)::EE') X1 VB2 LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 ============================ projedVal VA1 VB2
< LB': case LB'. Subgoal 1.2.3.2.1: Variables: VA I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X1 PV : projedVal VA VB2 RA : mem (X1, I) L RA1 : remove_all L X1 LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X1 V' LB : lookup B1 X1 VB1 MB : mem (X1, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X1 EE' LA' : X1 = X1 -> false LA'1 : lookup LRemain X1 VA1 ============================ projedVal VA1 VB2
< apply LA' to _. Subgoal 1.2.3.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 LB' : X = X1 -> false LB'1 : lookup EE' X1 VB2 ============================ projedVal VA1 VB2
< LA'': apply remove_all_lookup_other to RA1 LA'1 _. Subgoal 1.2.3.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 LB' : X = X1 -> false LB'1 : lookup EE' X1 VB2 LA'' : lookup L X1 VA1 ============================ projedVal VA1 VB2
< LB'': apply remove_all_lookup_other to RB LB'1 _. Subgoal 1.2.3.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 LB' : X = X1 -> false LB'1 : lookup EE' X1 VB2 LA'' : lookup L X1 VA1 LB'' : lookup B1 X1 VB2 ============================ projedVal VA1 VB2
< apply PC2 to LA'' LB''. Subgoal 1.2.3.2.2: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' X1 VA1 VB2 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' LA' : X = X1 -> false LA'1 : lookup LRemain X1 VA1 LB' : X = X1 -> false LB'1 : lookup EE' X1 VB2 LA'' : lookup L X1 VA1 LB'' : lookup B1 X1 VB2 H3 : projedVal VA1 VB2 ============================ projedVal VA1 VB2
< search. Subgoal 1.2.4: Variables: X VA VB I Rest LRemain L BRest B1 V' VB1 EE' IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : mem (X, I) L RA1 : remove_all L X LRemain H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest LA : lookup L X V' LB : lookup B1 X VB1 MB : mem (X, VB1) B1 IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest RB : remove_all B1 X EE' ============================ projedCtxs Rest BRest
< search. Subgoal 2: Variables: B X VA VB New L Rest IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsA : is_list (is_list (is_pair is_string is_value)) (L::Rest) IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs (L::Rest) B PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * ============================ exists RB, replaceScopes X VB B RB /\ projedCtxs (L::New) RB
< case IsA. Subgoal 2: Variables: B X VA VB New L Rest IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsB : is_list (is_list (is_pair is_string is_value)) B IsX : is_string X PC : projedCtxs (L::Rest) B PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest ============================ exists RB, replaceScopes X VB B RB /\ projedCtxs (L::New) RB
< PC: case PC. Subgoal 2: Variables: X VA VB New L Rest BRest B1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsB : is_list (is_list (is_pair is_string is_value)) (B1::BRest) IsX : is_string X PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
< IsB: case IsB. Subgoal 2: Variables: X VA VB New L Rest BRest B1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
< apply IH to _ _ _ PC3 PV RA1. Subgoal 2: Variables: X VA VB New L Rest BRest B1 RB IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : replaceScopes X VB BRest RB H4 : projedCtxs New RB ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
< Or: apply lookup_string_value_list_or_no to IsB IsX. Subgoal 2: Variables: X VA VB New L Rest BRest B1 RB IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : replaceScopes X VB BRest RB H4 : projedCtxs New RB Or : (exists V, lookup B1 X V) \/ no_lookup B1 X ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
< LB: case Or. Subgoal 2.1: Variables: X VA VB New L Rest BRest B1 RB V IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : replaceScopes X VB BRest RB H4 : projedCtxs New RB LB : lookup B1 X V ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
< LA: apply PC to LB. Subgoal 2.1: Variables: X VA VB New L Rest BRest B1 RB V VA1 IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : replaceScopes X VB BRest RB H4 : projedCtxs New RB LB : lookup B1 X V LA : lookup L X VA1 ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
< apply no_lookup to RA LA. Subgoal 2.2: Variables: X VA VB New L Rest BRest B1 RB IH : forall A B X VA VB RA, is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B -> is_string X -> projedCtxs A B -> projedVal VA VB -> replaceScopes X VA A RA * -> exists RB, replaceScopes X VB B RB /\ projedCtxs RA RB IsX : is_string X PV : projedVal VA VB RA : no_lookup L X RA1 : replaceScopes X VA Rest New * H1 : is_list (is_pair is_string is_value) L H2 : is_list (is_list (is_pair is_string is_value)) Rest PC : forall X VB, lookup B1 X VB -> exists VA, lookup L X VA PC1 : forall X VA, lookup L X VA -> exists VB, lookup B1 X VB PC2 : forall X VA VB, lookup L X VA -> lookup B1 X VB -> projedVal VA VB PC3 : projedCtxs Rest BRest IsB : is_list (is_pair is_string is_value) B1 IsB1 : is_list (is_list (is_pair is_string is_value)) BRest H3 : replaceScopes X VB BRest RB H4 : projedCtxs New RB LB : no_lookup B1 X ============================ exists RB, replaceScopes X VB (B1::BRest) RB /\ projedCtxs (L::New) RB
< search. Proof completed.
< Theorem projedFields_replaceRecVal_exists_forward : forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB. ============================ forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB
< induction on 3. IH : forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB ============================ forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA @ -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB
< intros PF PV RA. Variables: F VA VB FA RA FB IH : forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB PF : projedFields FA FB PV : projedVal VA VB RA : replaceRecVal F VA FA RA @ ============================ exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB
< RA: case RA. Subgoal 1: Variables: F VA VB FB Rest VOld IH : forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB PF : projedFields ((F, VOld)::Rest) FB PV : projedVal VA VB ============================ exists RB, replaceRecVal F VB FB RB /\ projedFields ((F, VA)::Rest) RB
< PF: case PF. Subgoal 1: Variables: F VA VB Rest VOld BRest VB1 IH : forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB PV : projedVal VA VB PF : projedVal VOld VB1 PF1 : projedFields Rest BRest ============================ exists RB, replaceRecVal F VB ((F, VB1)::BRest) RB /\ projedFields ((F, VA)::Rest) RB
< search. Subgoal 2: Variables: F VA VB FB RRest VO O Rest IH : forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB PF : projedFields ((O, VO)::Rest) FB PV : projedVal VA VB RA : F = O -> false RA1 : replaceRecVal F VA Rest RRest * ============================ exists RB, replaceRecVal F VB FB RB /\ projedFields ((O, VO)::RRest) RB
< PF: case PF. Subgoal 2: Variables: F VA VB RRest VO O Rest BRest VB1 IH : forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB PV : projedVal VA VB RA : F = O -> false RA1 : replaceRecVal F VA Rest RRest * PF : projedVal VO VB1 PF1 : projedFields Rest BRest ============================ exists RB, replaceRecVal F VB ((O, VB1)::BRest) RB /\ projedFields ((O, VO)::RRest) RB
< apply IH to PF1 PV RA1. Subgoal 2: Variables: F VA VB RRest VO O Rest BRest VB1 RB IH : forall F VA VB FA RA FB, projedFields FA FB -> projedVal VA VB -> replaceRecVal F VA FA RA * -> exists RB, replaceRecVal F VB FB RB /\ projedFields RA RB PV : projedVal VA VB RA : F = O -> false RA1 : replaceRecVal F VA Rest RRest * PF : projedVal VO VB1 PF1 : projedFields Rest BRest H1 : replaceRecVal F VB BRest RB H2 : projedFields RRest RB ============================ exists RB, replaceRecVal F VB ((O, VB1)::BRest) RB /\ projedFields ((O, VO)::RRest) RB
< search. Proof completed.
< Theorem projedFields_updateRecFields_exists_forward : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB. ============================ forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB
< induction on 4. IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB ============================ forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA @ -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB
< intros IsA PF PV UA. Variables: FA FB Fs VA VB RA IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : updateRecFields Fs VA FA RA @ ============================ exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB
< UA: case UA. Subgoal 1: Variables: FA FB VA VB RA F IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : replaceRecVal F VA FA RA ============================ exists RB, updateRecFields [F] VB FB RB /\ projedFields RA RB
< apply projedFields_replaceRecVal_exists_forward to PF PV UA. Subgoal 1: Variables: FA FB VA VB RA F RB IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : replaceRecVal F VA FA RA H1 : replaceRecVal F VB FB RB H2 : projedFields RA RB ============================ exists RB, updateRecFields [F] VB FB RB /\ projedFields RA RB
< search. Subgoal 2: Variables: FA FB VA VB RA RV Fields Updated FRest F IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : lookup FA F RV UA1 : matchRec RV Fields UA2 : updateRecFields FRest VA Fields Updated * UA3 : replaceRecVal F (recVal Updated) FA RA ============================ exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
< L: apply projedFields_lookup_exists to PF UA. Subgoal 2: Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : lookup FA F RV UA1 : matchRec RV Fields UA2 : updateRecFields FRest VA Fields Updated * UA3 : replaceRecVal F (recVal Updated) FA RA L : lookup FB F VB1 L1 : projedVal RV VB1 ============================ exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
< apply lookup_is_value to _ UA. Subgoal 2: Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : lookup FA F RV UA1 : matchRec RV Fields UA2 : updateRecFields FRest VA Fields Updated * UA3 : replaceRecVal F (recVal Updated) FA RA L : lookup FB F VB1 L1 : projedVal RV VB1 H1 : is_value RV ============================ exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
< M: apply matchRec_projedVal to L1 _ UA1. Subgoal 2: Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 Fs' IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : lookup FA F RV UA1 : matchRec RV Fields UA2 : updateRecFields FRest VA Fields Updated * UA3 : replaceRecVal F (recVal Updated) FA RA L : lookup FB F VB1 L1 : projedVal RV VB1 H1 : is_value RV M : matchRec VB1 Fs' M1 : projedFields Fields Fs' ============================ exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
< apply matchRec_is to _ UA1. Subgoal 2: Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 Fs' IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : lookup FA F RV UA1 : matchRec RV Fields UA2 : updateRecFields FRest VA Fields Updated * UA3 : replaceRecVal F (recVal Updated) FA RA L : lookup FB F VB1 L1 : projedVal RV VB1 H1 : is_value RV M : matchRec VB1 Fs' M1 : projedFields Fields Fs' H2 : is_list (is_pair is_string is_value) Fields ============================ exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
< UB: apply IH to _ M1 PV UA2. Subgoal 2: Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 Fs' RB IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : lookup FA F RV UA1 : matchRec RV Fields UA2 : updateRecFields FRest VA Fields Updated * UA3 : replaceRecVal F (recVal Updated) FA RA L : lookup FB F VB1 L1 : projedVal RV VB1 H1 : is_value RV M : matchRec VB1 Fs' M1 : projedFields Fields Fs' H2 : is_list (is_pair is_string is_value) Fields UB : updateRecFields FRest VB Fs' RB UB1 : projedFields Updated RB ============================ exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
< apply projedFields_replaceRecVal_exists_forward to _ _ UA3 with VB = recVal RB. Subgoal 2: Variables: FA FB VA VB RA RV Fields Updated FRest F VB1 Fs' RB RB1 IH : forall FA FB Fs VA VB RA, is_list (is_pair is_string is_value) FA -> projedFields FA FB -> projedVal VA VB -> updateRecFields Fs VA FA RA * -> exists RB, updateRecFields Fs VB FB RB /\ projedFields RA RB IsA : is_list (is_pair is_string is_value) FA PF : projedFields FA FB PV : projedVal VA VB UA : lookup FA F RV UA1 : matchRec RV Fields UA2 : updateRecFields FRest VA Fields Updated * UA3 : replaceRecVal F (recVal Updated) FA RA L : lookup FB F VB1 L1 : projedVal RV VB1 H1 : is_value RV M : matchRec VB1 Fs' M1 : projedFields Fields Fs' H2 : is_list (is_pair is_string is_value) Fields UB : updateRecFields FRest VB Fs' RB UB1 : projedFields Updated RB H3 : replaceRecVal F (recVal RB) FB RB1 H4 : projedFields RA RB1 ============================ exists RB, updateRecFields (F::FRest) VB FB RB /\ projedFields RA RB
< search. Proof completed.
< Theorem projedVal_recVal : forall Fs V, projedVal (recVal Fs) V -> exists Fs', V = recVal Fs'. ============================ forall Fs V, projedVal (recVal Fs) V -> exists Fs', V = recVal Fs'
< induction on 1. IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs' ============================ forall Fs V, projedVal (recVal Fs) V @ -> exists Fs', V = recVal Fs'
< intros PV. Variables: Fs V IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs' PV : projedVal (recVal Fs) V @ ============================ exists Fs', V = recVal Fs'
< PV: case PV. Subgoal 1: Variables: Fs IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs' ============================ exists Fs', recVal Fs = recVal Fs'
< search. Subgoal 2: Variables: Fs V IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs' PV : |{value}- recVal Fs ~~> V ============================ exists Fs', V = recVal Fs'
< case PV. Subgoal 3: Variables: Fs V V2 IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs' PV : projedVal (recVal Fs) V2 * PV1 : projedVal V2 V * ============================ exists Fs', V = recVal Fs'
< apply IH to PV. Subgoal 3: Variables: Fs V Fs' IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs' PV : projedVal (recVal Fs) (recVal Fs') * PV1 : projedVal (recVal Fs') V * ============================ exists Fs', V = recVal Fs'
< apply IH to PV1. Subgoal 3: Variables: Fs Fs' Fs'1 IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs' PV : projedVal (recVal Fs) (recVal Fs') * PV1 : projedVal (recVal Fs') (recVal Fs'1) * ============================ exists Fs', recVal Fs'1 = recVal Fs'
< search. Subgoal 4: Variables: Fs Fs2 IH : forall Fs V, projedVal (recVal Fs) V * -> exists Fs', V = recVal Fs' PV : projedFields Fs Fs2 * ============================ exists Fs', recVal Fs2 = recVal Fs'
< search. Proof completed.
< Theorem projedVal_intVal : forall I V, projedVal (intVal I) V -> V = intVal I. ============================ forall I V, projedVal (intVal I) V -> V = intVal I
< induction on 1. IH : forall I V, projedVal (intVal I) V * -> V = intVal I ============================ forall I V, projedVal (intVal I) V @ -> V = intVal I
< intros PV. Variables: I V IH : forall I V, projedVal (intVal I) V * -> V = intVal I PV : projedVal (intVal I) V @ ============================ V = intVal I
< PV: case PV. Subgoal 1: Variables: I IH : forall I V, projedVal (intVal I) V * -> V = intVal I ============================ intVal I = intVal I
< search. Subgoal 2: Variables: I V IH : forall I V, projedVal (intVal I) V * -> V = intVal I PV : |{value}- intVal I ~~> V ============================ V = intVal I
< case PV. Subgoal 3: Variables: I V V2 IH : forall I V, projedVal (intVal I) V * -> V = intVal I PV : projedVal (intVal I) V2 * PV1 : projedVal V2 V * ============================ V = intVal I
< apply IH to PV. Subgoal 3: Variables: I V IH : forall I V, projedVal (intVal I) V * -> V = intVal I PV : projedVal (intVal I) (intVal I) * PV1 : projedVal (intVal I) V * ============================ V = intVal I
< apply IH to PV1. Subgoal 3: Variables: I IH : forall I V, projedVal (intVal I) V * -> V = intVal I PV : projedVal (intVal I) (intVal I) * PV1 : projedVal (intVal I) (intVal I) * ============================ intVal I = intVal I
< search. Proof completed.
< Theorem projedVal_stringVal : forall S V, projedVal (stringVal S) V -> V = stringVal S. ============================ forall S V, projedVal (stringVal S) V -> V = stringVal S
< induction on 1. IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S ============================ forall S V, projedVal (stringVal S) V @ -> V = stringVal S
< intros PV. Variables: S V IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S PV : projedVal (stringVal S) V @ ============================ V = stringVal S
< PV: case PV. Subgoal 1: Variables: S IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S ============================ stringVal S = stringVal S
< search. Subgoal 2: Variables: S V IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S PV : |{value}- stringVal S ~~> V ============================ V = stringVal S
< case PV. Subgoal 3: Variables: S V V2 IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S PV : projedVal (stringVal S) V2 * PV1 : projedVal V2 V * ============================ V = stringVal S
< apply IH to PV. Subgoal 3: Variables: S V IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S PV : projedVal (stringVal S) (stringVal S) * PV1 : projedVal (stringVal S) V * ============================ V = stringVal S
< apply IH to PV1. Subgoal 3: Variables: S IH : forall S V, projedVal (stringVal S) V * -> V = stringVal S PV : projedVal (stringVal S) (stringVal S) * PV1 : projedVal (stringVal S) (stringVal S) * ============================ stringVal S = stringVal S
< search. Proof completed.
< Theorem projedVal_trueVal : forall V, projedVal trueVal V -> V = trueVal. ============================ forall V, projedVal trueVal V -> V = trueVal
< induction on 1. IH : forall V, projedVal trueVal V * -> V = trueVal ============================ forall V, projedVal trueVal V @ -> V = trueVal
< intros PV. Variables: V IH : forall V, projedVal trueVal V * -> V = trueVal PV : projedVal trueVal V @ ============================ V = trueVal
< PV: case PV. Subgoal 1: IH : forall V, projedVal trueVal V * -> V = trueVal ============================ trueVal = trueVal
< search. Subgoal 2: Variables: V IH : forall V, projedVal trueVal V * -> V = trueVal PV : |{value}- trueVal ~~> V ============================ V = trueVal
< case PV. Subgoal 3: Variables: V V2 IH : forall V, projedVal trueVal V * -> V = trueVal PV : projedVal trueVal V2 * PV1 : projedVal V2 V * ============================ V = trueVal
< apply IH to PV. Subgoal 3: Variables: V IH : forall V, projedVal trueVal V * -> V = trueVal PV : projedVal trueVal trueVal * PV1 : projedVal trueVal V * ============================ V = trueVal
< apply IH to PV1. Subgoal 3: IH : forall V, projedVal trueVal V * -> V = trueVal PV : projedVal trueVal trueVal * PV1 : projedVal trueVal trueVal * ============================ trueVal = trueVal
< search. Proof completed.
< Theorem projedVal_falseVal : forall V, projedVal falseVal V -> V = falseVal. ============================ forall V, projedVal falseVal V -> V = falseVal
< induction on 1. IH : forall V, projedVal falseVal V * -> V = falseVal ============================ forall V, projedVal falseVal V @ -> V = falseVal
< intros PV. Variables: V IH : forall V, projedVal falseVal V * -> V = falseVal PV : projedVal falseVal V @ ============================ V = falseVal
< PV: case PV. Subgoal 1: IH : forall V, projedVal falseVal V * -> V = falseVal ============================ falseVal = falseVal
< search. Subgoal 2: Variables: V IH : forall V, projedVal falseVal V * -> V = falseVal PV : |{value}- falseVal ~~> V ============================ V = falseVal
< case PV. Subgoal 3: Variables: V V2 IH : forall V, projedVal falseVal V * -> V = falseVal PV : projedVal falseVal V2 * PV1 : projedVal V2 V * ============================ V = falseVal
< apply IH to PV. Subgoal 3: Variables: V IH : forall V, projedVal falseVal V * -> V = falseVal PV : projedVal falseVal falseVal * PV1 : projedVal falseVal V * ============================ V = falseVal
< apply IH to PV1. Subgoal 3: IH : forall V, projedVal falseVal V * -> V = falseVal PV : projedVal falseVal falseVal * PV1 : projedVal falseVal falseVal * ============================ falseVal = falseVal
< search. Proof completed.
< Extensible_Theorem trans_evalExpr_forward : forall E T EE EE_T FE FE_T V O, IsE : is_expr E -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> RFE : rel_FE FE FE_T -> PC : projedCtxs EE EE_T -> Trans : transE E T -> Ev : evalExpr FE EE E V O -> exists V_T, evalExpr FE_T EE_T T V_T O on Ev as IH_E, trans_evalStmt_forward : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> PC : projedCtxs (Scope::EE) EE_T -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> Ev : evalStmt FE (Scope::EE) S EE' O -> exists EE_T', evalStmt FE_T EE_T T EE_T' O on Ev as IH_S, trans_evalArgs_forward : forall A T EE EE_T FE FE_T V O, IsA : is_args A -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> RFE : rel_FE FE FE_T -> PC : projedCtxs EE EE_T -> Trans : transA A T -> Ev : evalArgs FE EE A V O -> exists V_T, evalArgs FE_T EE_T T V_T O on Ev as IH_A, trans_evalRecFields_forward : forall RF T EE EE_T FE FE_T V O, IsRF : is_recFieldExprs RF -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> RFE : rel_FE FE FE_T -> PC : projedCtxs EE EE_T -> Trans : transRF RF T -> Ev : evalRecFields FE EE RF V O -> exists V_T, evalRecFields FE_T EE_T T V_T O on Ev as IH_RF. Subgoal 1: Variables: E T EE EE_T FE FE_T V O IsE : is_expr E IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE E T Ev : evalExpr FE EE E V O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
< search. Subgoal 2: Variables: S T Names Names' Scope EE EE_T FE FE_T EE' O IsS : is_stmt S IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names S T Names' Ev : evalStmt FE (Scope::EE) S EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
< search. Subgoal 3: Variables: A T EE EE_T FE FE_T V O IsA : is_args A IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA A T Ev : evalArgs FE EE A V O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
< search. Subgoal 4: Variables: RF T EE EE_T FE FE_T V O IsRF : is_recFieldExprs RF IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF RF T Ev : evalRecFields FE EE RF V O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
< search. Subgoal 5.1.1: Variables: T EE EE_T FE FE_T I IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (num I) T Ev : evalExpr FE EE (num I) (intVal I) [] @ ============================ exists V_T, evalExpr FE_T EE_T T V_T []
< case Trans. Subgoal 5.1.1: Variables: EE EE_T FE FE_T I IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (num I) (intVal I) [] @ ============================ exists V_T, evalExpr FE_T EE_T (num I) V_T []
< search. Subgoal 5.1.2: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (plus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.2: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< M1: apply matchInt_projedVal to Pr1 _ Ev3. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< M2: apply matchInt_projedVal to Pr2 _ Ev4. Subgoal 5.1.2: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (plus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 + I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 M2 : matchInt V_T1 I2 ============================ exists V_T, evalExpr FE_T EE_T (plus E11 E21) V_T O
< search. Subgoal 5.1.3: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (minus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.3: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< M1: apply matchInt_projedVal to Pr1 _ Ev3. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< M2: apply matchInt_projedVal to Pr2 _ Ev4. Subgoal 5.1.3: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (minus E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 - I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 M2 : matchInt V_T1 I2 ============================ exists V_T, evalExpr FE_T EE_T (minus E11 E21) V_T O
< search. Subgoal 5.1.4: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (mult E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.4: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< M1: apply matchInt_projedVal to Pr1 _ Ev3. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< M2: apply matchInt_projedVal to Pr2 _ Ev4. Subgoal 5.1.4: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (mult E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 * I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 M2 : matchInt V_T1 I2 ============================ exists V_T, evalExpr FE_T EE_T (mult E11 E21) V_T O
< search. Subgoal 5.1.5: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (div E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.5: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< M1: apply matchInt_projedVal to Pr1 _ Ev3. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< M2: apply matchInt_projedVal to Pr2 _ Ev4. Subgoal 5.1.5: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (div E1 E2) (intVal I) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 / I2 = I Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 M2 : matchInt V_T1 I2 ============================ exists V_T, evalExpr FE_T EE_T (div E11 E21) V_T O
< search. Subgoal 5.1.6: Variables: T EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE true T Ev : evalExpr FE EE true trueVal [] @ ============================ exists V_T, evalExpr FE_T EE_T T V_T []
< case Trans. Subgoal 5.1.6: Variables: EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE true trueVal [] @ ============================ exists V_T, evalExpr FE_T EE_T true V_T []
< search. Subgoal 5.1.7: Variables: T EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE false T Ev : evalExpr FE EE false falseVal [] @ ============================ exists V_T, evalExpr FE_T EE_T T V_T []
< case Trans. Subgoal 5.1.7: Variables: EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE false falseVal [] @ ============================ exists V_T, evalExpr FE_T EE_T false V_T []
< search. Subgoal 5.1.8: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.8: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev3. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev3 EvB2. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev3. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< M1: apply matchTrue_projedVal to Pr1 _ Ev2. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchTrue V_T ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< M2: apply matchTrue_projedVal to Pr2 _ Ev4. Subgoal 5.1.8: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchTrue V_T M2 : matchTrue V_T1 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< search. Subgoal 5.1.9: Variables: T EE EE_T FE FE_T O V1 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.9: Variables: T EE EE_T FE FE_T O V1 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.9: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.9: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.9: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.9: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O Pr1 : projedVal V1 V_T H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< M1: apply matchFalse_projedVal to Pr1 _ Ev2. Subgoal 5.1.9: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O Pr1 : projedVal V1 V_T H3 : is_value V1 M1 : matchFalse V_T ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< search. Subgoal 5.1.10: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.10: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev3. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev3 EvB2. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev3. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< M1: apply matchTrue_projedVal to Pr1 _ Ev2. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchTrue V_T ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< M2: apply matchFalse_projedVal to Pr2 _ Ev4. Subgoal 5.1.10: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (and E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchTrue V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchTrue V_T M2 : matchFalse V_T1 ============================ exists V_T, evalExpr FE_T EE_T (and E11 E21) V_T O
< search. Subgoal 5.1.11: Variables: T EE EE_T FE FE_T O V1 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.11: Variables: T EE EE_T FE FE_T O V1 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.11: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.11: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.11: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.11: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O Pr1 : projedVal V1 V_T H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< M1: apply matchTrue_projedVal to Pr1 _ Ev2. Subgoal 5.1.11: Variables: EE EE_T FE FE_T O V1 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O Pr1 : projedVal V1 V_T H3 : is_value V1 M1 : matchTrue V_T ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< search. Subgoal 5.1.12: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.12: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev3. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev3 EvB2. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev3. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< M1: apply matchFalse_projedVal to Pr1 _ Ev2. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchFalse V_T ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< M2: apply matchTrue_projedVal to Pr2 _ Ev4. Subgoal 5.1.12: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchFalse V_T M2 : matchTrue V_T1 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< search. Subgoal 5.1.13: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.13: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev3. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev3 EvB2. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev3. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< M1: apply matchFalse_projedVal to Pr1 _ Ev2. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchFalse V_T ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< M2: apply matchFalse_projedVal to Pr2 _ Ev4. Subgoal 5.1.13: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (or E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : matchFalse V1 Ev3 : evalExpr FE EE E2 V2 O3 * Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchFalse V_T M2 : matchFalse V_T1 ============================ exists V_T, evalExpr FE_T EE_T (or E11 E21) V_T O
< search. Subgoal 5.1.14: Variables: T EE EE_T FE FE_T O V1 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (not E1) T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.14: Variables: T EE EE_T FE FE_T O V1 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (not E1) T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.14: Variables: EE EE_T FE FE_T O V1 E1 E3 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.14: Variables: EE EE_T FE FE_T O V1 E1 E3 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvB1 : evalExpr FE_T EE_T E3 V_T O ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.14: Variables: EE EE_T FE FE_T O V1 E1 E3 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvB1 : evalExpr FE_T EE_T E3 V_T O Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.14: Variables: EE EE_T FE FE_T O V1 E1 E3 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvB1 : evalExpr FE_T EE_T E3 V_T O Pr1 : projedVal V1 V_T H2 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< M1: apply matchFalse_projedVal to Pr1 _ Ev2. Subgoal 5.1.14: Variables: EE EE_T FE FE_T O V1 E1 E3 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchFalse V1 H1 : is_expr E1 Trans : transE E1 E3 EvB1 : evalExpr FE_T EE_T E3 V_T O Pr1 : projedVal V1 V_T H2 : is_value V1 M1 : matchFalse V_T ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< search. Subgoal 5.1.15: Variables: T EE EE_T FE FE_T O V1 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (not E1) T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.15: Variables: T EE EE_T FE FE_T O V1 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (not E1) T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.15: Variables: EE EE_T FE FE_T O V1 E1 E3 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.15: Variables: EE EE_T FE FE_T O V1 E1 E3 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvB1 : evalExpr FE_T EE_T E3 V_T O ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.15: Variables: EE EE_T FE FE_T O V1 E1 E3 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvB1 : evalExpr FE_T EE_T E3 V_T O Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.15: Variables: EE EE_T FE FE_T O V1 E1 E3 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvB1 : evalExpr FE_T EE_T E3 V_T O Pr1 : projedVal V1 V_T H2 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< M1: apply matchTrue_projedVal to Pr1 _ Ev2. Subgoal 5.1.15: Variables: EE EE_T FE FE_T O V1 E1 E3 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (not E1) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O * Ev2 : matchTrue V1 H1 : is_expr E1 Trans : transE E1 E3 EvB1 : evalExpr FE_T EE_T E3 V_T O Pr1 : projedVal V1 V_T H2 : is_value V1 M1 : matchTrue V_T ============================ exists V_T, evalExpr FE_T EE_T (not E3) V_T O
< search. Subgoal 5.1.16: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.16: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< M1: apply matchInt_projedVal to Pr1 _ Ev3. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< M2: apply matchInt_projedVal to Pr2 _ Ev4. Subgoal 5.1.16: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 > I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 M2 : matchInt V_T1 I2 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< search. Subgoal 5.1.17: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.17: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< M1: apply matchInt_projedVal to Pr1 _ Ev3. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< M2: apply matchInt_projedVal to Pr2 _ Ev4. Subgoal 5.1.17: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (greater E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 <= I2 Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 M2 : matchInt V_T1 I2 ============================ exists V_T, evalExpr FE_T EE_T (greater E11 E21) V_T O
< search. Subgoal 5.1.18: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.18: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M1: apply matchInt_projedVal to Pr1 _ Ev3. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M2: apply matchInt_projedVal to Pr2 _ Ev4. Subgoal 5.1.18: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I Ev4 : matchInt V2 I Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I M2 : matchInt V_T1 I ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< search. Subgoal 5.1.19: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.19: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M1: apply matchInt_projedVal to Pr1 _ Ev3. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M2: apply matchInt_projedVal to Pr2 _ Ev4. Subgoal 5.1.19: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 I1 I2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchInt V1 I1 Ev4 : matchInt V2 I2 Ev5 : I1 = I2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchInt V_T I1 M2 : matchInt V_T1 I2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< search. Subgoal 5.1.20: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.20: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M1: apply matchTrue_projedVal to Pr1 _ Ev3. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchTrue V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M2: apply matchTrue_projedVal to Pr2 _ Ev4. Subgoal 5.1.20: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchTrue V_T M2 : matchTrue V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< search. Subgoal 5.1.21: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.21: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M1: apply matchFalse_projedVal to Pr1 _ Ev3. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchFalse V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M2: apply matchFalse_projedVal to Pr2 _ Ev4. Subgoal 5.1.21: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchFalse V_T M2 : matchFalse V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< search. Subgoal 5.1.22: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.22: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M1: apply matchTrue_projedVal to Pr1 _ Ev3. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchTrue V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M2: apply matchFalse_projedVal to Pr2 _ Ev4. Subgoal 5.1.22: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchTrue V1 Ev4 : matchFalse V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchTrue V_T M2 : matchFalse V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< search. Subgoal 5.1.23: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.23: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M1: apply matchFalse_projedVal to Pr1 _ Ev3. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchFalse V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M2: apply matchTrue_projedVal to Pr2 _ Ev4. Subgoal 5.1.23: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchFalse V1 Ev4 : matchTrue V2 Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchFalse V_T M2 : matchTrue V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< search. Subgoal 5.1.24: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.24: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M1: apply matchString_projedVal to Pr1 _ Ev3. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchString V_T S ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M2: apply matchString_projedVal to Pr2 _ Ev4. Subgoal 5.1.24: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) trueVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S Ev4 : matchString V2 S Ev5 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchString V_T S M2 : matchString V_T1 S ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< search. Subgoal 5.1.25: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.25: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M1: apply matchString_projedVal to Pr1 _ Ev3. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchString V_T S1 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< M2: apply matchString_projedVal to Pr2 _ Ev4. Subgoal 5.1.25: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (eq E1 E2) falseVal O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 = S2 -> false Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchString V_T S1 M2 : matchString V_T1 S2 ============================ exists V_T, evalExpr FE_T EE_T (eq E11 E21) V_T O
< search. Subgoal 5.1.26: Variables: T EE EE_T FE FE_T S IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (stringLit S) T Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @ ============================ exists V_T, evalExpr FE_T EE_T T V_T []
< case Trans. Subgoal 5.1.26: Variables: EE EE_T FE FE_T S IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (stringLit S) (stringVal S) [] @ ============================ exists V_T, evalExpr FE_T EE_T (stringLit S) V_T []
< search. Subgoal 5.1.27: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (appString E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.27: Variables: T EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< EvB2: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev2. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< Pr1: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< Pr2: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev2 EvB2. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< apply evalExpr_isValue to _ _ _ Ev2. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< M1: apply matchString_projedVal to Pr1 _ Ev3. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchString V_T S1 ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< M2: apply matchString_projedVal to Pr2 _ Ev4. Subgoal 5.1.27: Variables: EE EE_T FE FE_T O V1 O2 V2 O3 S1 S2 S E2 E1 E21 E11 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) O @ Ev1 : evalExpr FE EE E1 V1 O2 * Ev2 : evalExpr FE EE E2 V2 O3 * Ev3 : matchString V1 S1 Ev4 : matchString V2 S2 Ev5 : S1 ++ S2 = S Ev6 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE E1 E11 Trans1 : transE E2 E21 EvB1 : evalExpr FE_T EE_T E11 V_T O2 EvB2 : evalExpr FE_T EE_T E21 V_T1 O3 Pr1 : projedVal V1 V_T Pr2 : projedVal V2 V_T1 H3 : is_value V1 H4 : is_value V2 M1 : matchString V_T S1 M2 : matchString V_T1 S2 ============================ exists V_T, evalExpr FE_T EE_T (appString E11 E21) V_T O
< search. Subgoal 5.1.28: Variables: T EE EE_T FE FE_T V X IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (name X) T Ev : evalExpr FE EE (name X) V [] @ Ev1 : lookupScopes X EE V ============================ exists V_T, evalExpr FE_T EE_T T V_T []
< case IsE. Subgoal 5.1.28: Variables: T EE EE_T FE FE_T V X IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (name X) T Ev : evalExpr FE EE (name X) V [] @ Ev1 : lookupScopes X EE V H1 : is_string X ============================ exists V_T, evalExpr FE_T EE_T T V_T []
< case Trans. Subgoal 5.1.28: Variables: EE EE_T FE FE_T V X IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (name X) V [] @ Ev1 : lookupScopes X EE V H1 : is_string X ============================ exists V_T, evalExpr FE_T EE_T (name X) V_T []
< apply projedCtxs_lookupScopes_exists_forward to _ _ _ PC Ev1. Subgoal 5.1.28: Variables: EE EE_T FE FE_T V X VB IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (name X) V [] @ Ev1 : lookupScopes X EE V H1 : is_string X H2 : lookupScopes X EE_T VB H3 : projedVal V VB ============================ exists V_T, evalExpr FE_T EE_T (name X) V_T []
< search. Subgoal 5.1.29: Variables: T EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (call Fun Args) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.29: Variables: T EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< R: case RFE (keep). Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< LF: apply R to Ev1. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< EvB1: apply IH_A to _ _ _ _ _ _ PC Trans Ev2. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< Pr: apply trans_evalArgs_same to _ _ _ _ _ _ _ _ Ev2 EvB1. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< IsArgVals: apply evalArgs_isValue to _ _ _ Ev2. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< apply transA_is to _ Trans. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< IsV_T: apply evalArgs_isValue to _ _ _ EvB1. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv). Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< apply projedArgs_zip to Pr Ev3. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< ZB: assert zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z'). Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< apply zip_ctx_names to Z. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< apply zip_ctx_names to ZB. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< IsP: apply lookup_is_value_funCtx to _ Ev1. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body))) ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< IsP: case IsP. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body)) ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< IsP: case IsP1. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body) ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< IsP: case IsP2. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< IsInitEnv: apply zip_is to _ _ Z. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< IsZ'+: apply zip_is to _ _ ZB. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z') ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< PCZ: apply zip_projedArgs to _ Z ZB. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z') PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z'] ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< EvB2: apply IH_S to _ _ _ _ _ _ _ PCZ _ LF1 Ev4. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z') PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z'] EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3 ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< PC': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ _ Ev4 EvB2. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z') PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z'] EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3 PC' : projedCtxs EE2 EE_T' ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< apply evalStmt_isCtx to _ _ _ Ev4. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z') PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z'] EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3 PC' : projedCtxs EE2 EE_T' H7 : is_list (is_list (is_pair is_string is_value)) EE2 ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< apply transS_is to _ _ LF1. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z') PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z'] EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3 PC' : projedCtxs EE2 EE_T' H7 : is_list (is_list (is_pair is_string is_value)) EE2 H8 : is_stmt Body_T ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< apply evalStmt_isCtx to _ _ _ EvB2. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z') PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z'] EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3 PC' : projedCtxs EE2 EE_T' H7 : is_list (is_list (is_pair is_string is_value)) EE2 H8 : is_stmt Body_T H9 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< apply projedCtxs_lookupScopes_exists_forward to _ _ _ PC' Ev6. Subgoal 5.1.29: Variables: EE EE_T FE FE_T V O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE2 O3 Args Fun A1 Body_T Names V_T Z' EE_T' VB IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (call Fun Args) V O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE2 V H1 : is_string Fun H2 : is_args Args Trans : transA Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names EvB1 : evalArgs FE_T EE_T A1 V_T O2 Pr : projedArgs ArgVals V_T IsArgVals : is_list is_value ArgVals H3 : is_args A1 IsV_T : is_list is_value V_T Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H4 : zip ArgNames V_T Z' ZB : zip (RetVar::ArgNames) (RVVal::V_T) ((RetVar, RVVal)::Z') H5 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H6 : ctx_names [(RetVar, RVVal)::Z'] [RetVar::ArgNames] IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsZ'+ : is_list (is_pair is_string is_value) ((RetVar, RVVal)::Z') PCZ : projedCtxs [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::Z'] EvB2 : evalStmt FE_T [(RetVar, RVVal)::Z'] Body_T EE_T' O3 PC' : projedCtxs EE2 EE_T' H7 : is_list (is_list (is_pair is_string is_value)) EE2 H8 : is_stmt Body_T H9 : is_list (is_list (is_pair is_string is_value)) EE_T' H10 : lookupScopes RetVar EE_T' VB H11 : projedVal V VB ============================ exists V_T, evalExpr FE_T EE_T (call Fun A1) V_T O
< search. Subgoal 5.1.30: Variables: T EE EE_T FE FE_T O VF RF IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (recBuild RF) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @ Ev1 : evalRecFields FE EE RF VF O * ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.30: Variables: T EE EE_T FE FE_T O VF RF IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @ Ev1 : evalRecFields FE EE RF VF O * H1 : is_recFieldExprs RF ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.30: Variables: EE EE_T FE FE_T O VF RF RF2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @ Ev1 : evalRecFields FE EE RF VF O * H1 : is_recFieldExprs RF Trans : transRF RF RF2 ============================ exists V_T, evalExpr FE_T EE_T (recBuild RF2) V_T O
< apply IH_RF to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.30: Variables: EE EE_T FE FE_T O VF RF RF2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recBuild RF) (recVal VF) O @ Ev1 : evalRecFields FE EE RF VF O * H1 : is_recFieldExprs RF Trans : transRF RF RF2 H2 : evalRecFields FE_T EE_T RF2 V_T O ============================ exists V_T, evalExpr FE_T EE_T (recBuild RF2) V_T O
< search. Subgoal 5.1.31: Variables: T EE EE_T FE FE_T V O VR Fields F Rec IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr (recFieldAccess Rec F) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< case IsE. Subgoal 5.1.31: Variables: T EE EE_T FE FE_T V O VR Fields F Rec IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.31: Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 ============================ exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.1.31: Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvB : evalExpr FE_T EE_T E2 V_T O ============================ exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB. Subgoal 5.1.31: Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvB : evalExpr FE_T EE_T E2 V_T O Pr : projedVal VR V_T ============================ exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.1.31: Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvB : evalExpr FE_T EE_T E2 V_T O Pr : projedVal VR V_T H3 : is_value VR ============================ exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
< M: apply matchRec_projedVal to Pr _ Ev2. Subgoal 5.1.31: Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T Fs' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvB : evalExpr FE_T EE_T E2 V_T O Pr : projedVal VR V_T H3 : is_value VR M : matchRec V_T Fs' M1 : projedFields Fields Fs' ============================ exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
< apply projedFields_lookup_exists to M1 Ev3. Subgoal 5.1.31: Variables: EE EE_T FE FE_T V O VR Fields F Rec E2 V_T Fs' VB IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE (recFieldAccess Rec F) V O @ Ev1 : evalExpr FE EE Rec VR O * Ev2 : matchRec VR Fields Ev3 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Rec E2 EvB : evalExpr FE_T EE_T E2 V_T O Pr : projedVal VR V_T H3 : is_value VR M : matchRec V_T Fs' M1 : projedFields Fields Fs' H4 : lookup Fs' F VB H5 : projedVal V VB ============================ exists V_T, evalExpr FE_T EE_T (recFieldAccess E2 F) V_T O
< search. Subgoal 5.1.32: Variables: T EE EE_T FE FE_T V O E_P V_P O_P IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transE <unknown K evalExpr> T Ev : evalExpr FE EE <unknown K evalExpr> V O @ Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.1.32: Variables: T EE EE_T FE FE_T V O E_P V_P O_P E_P1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * Trans : |{expr}- <unknown K evalExpr> ~~> E_P1 Trans1 : transE E_P1 T ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< apply proj_expr_unique to Trans Ev1 _. Subgoal 5.1.32: Variables: T EE EE_T FE FE_T V O E_P V_P O_P IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< apply proj_expr_is to Ev1 _. Subgoal 5.1.32: Variables: T EE EE_T FE FE_T V O E_P V_P O_P IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< EvB: apply IH_E to _ _ _ _ _ _ PC Trans1 Ev2. Subgoal 5.1.32: Variables: T EE EE_T FE FE_T V O E_P V_P O_P V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P EvB : evalExpr FE_T EE_T T V_T O_P ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< EvP: apply proj_evalExpr_forward to Ev1 _ _ _ Ev. Subgoal 5.1.32: Variables: T EE EE_T FE FE_T V O E_P V_P O_P V_T V' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V_P O_P * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P EvB : evalExpr FE_T EE_T T V_T O_P EvP : evalExpr FE EE E_P V' O EvP1 : projedVal V V' ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< apply evalExpr_unique to _ _ _ Ev2 EvP. Subgoal 5.1.32: Variables: T EE EE_T FE FE_T V O E_P V_T V' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalExpr FE EE <unknown K evalExpr> V O @ Ev1 : |{expr}- <unknown K evalExpr> ~~> E_P Ev2 : evalExpr FE EE E_P V' O * Trans : |{expr}- <unknown K evalExpr> ~~> E_P Trans1 : transE E_P T H1 : is_expr E_P EvB : evalExpr FE_T EE_T T V_T O EvP : evalExpr FE EE E_P V' O EvP1 : projedVal V V' ============================ exists V_T, evalExpr FE_T EE_T T V_T O
< search. Subgoal 5.2.1: Variables: T Names Names' Scope EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names noop T Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' []
< case Trans. Subgoal 5.2.1: Variables: Names' Scope EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ exists EE_T', evalStmt FE_T EE_T noop EE_T' []
< search. Subgoal 5.2.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< EvB1: apply IH_S to _ _ _ _ _ _ RFE PC _ Trans Ev1. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply transS_is to _ _ Trans. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply transS_isNames to _ _ Trans. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply evalStmt_isCtx to _ _ _ EvB1. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< C: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 C : ctx_names EE3 Names3 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< case Ctxs. Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' BRest B IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 C : ctx_names EE3 Names3 H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply transS_old_scopes to _ _ Trans. Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) (Scope'::BRest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 C : ctx_names EE3 (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< SS': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) (Scope'::BRest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 C : ctx_names EE3 (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest SS' : projedCtxs EE3 EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< case C (keep). Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' ARest A IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) (Scope'::BRest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) (A::ARest) C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest SS' : projedCtxs (A::ARest) EE_T' H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE SS' _ Trans1 Ev2. Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' ARest A EE_T'1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) (Scope'::BRest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) (A::ARest) C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest SS' : projedCtxs (A::ARest) EE_T' H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest EvB2 : evalStmt FE_T EE_T' S21 EE_T'1 O3 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< search. Subgoal 5.2.3: Variables: T Names Names' Scope EE EE_T FE FE_T O V X E Ty IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.3: Variables: T Names Names' Scope EE EE_T FE FE_T O V X E Ty IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.3: Variables: Scope EE EE_T FE FE_T O V X E Ty Names1 Scope1 E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 ============================ exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.3: Variables: Scope EE EE_T FE FE_T O V X E Ty Names1 Scope1 E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O ============================ exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
< case PC. Subgoal 5.2.3: Variables: Scope EE FE FE_T O V X E Ty Names1 Scope1 E2 V_T BRest B IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B::BRest) IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope)::EE) O @ Ev1 : evalExpr FE (Scope::EE) E V O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T (B::BRest) E2 V_T O H4 : forall X VB, lookup B X VB -> exists VA, lookup Scope X VA H5 : forall X VA, lookup Scope X VA -> exists VB, lookup B X VB H6 : forall X VA VB, lookup Scope X VA -> lookup B X VB -> projedVal VA VB H7 : projedCtxs EE BRest ============================ exists EE_T', evalStmt FE_T (B::BRest) (declare Ty X E2) EE_T' O
< search. Subgoal 5.2.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V E X IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V E X IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V E X E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V E X E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< apply transE_is to _ Trans. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V E X E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H3 : is_expr E2 ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< PV: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V E X E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H3 : is_expr E2 PV : projedVal V V_T ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< apply projedCtxs_replaceScopes_exists_forward to _ _ _ PC PV Ev2. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V E X E2 V_T RB IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : replaceScopes X V (Scope::EE) EE' H1 : is_string X H2 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H3 : is_expr E2 PV : projedVal V V_T H4 : replaceScopes X V_T EE_T RB H5 : projedCtxs EE' RB ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< search. Subgoal 5.2.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (recUpdate Rec Fields E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply transE_is to _ Trans. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H4 : is_expr E2 ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H4 : is_expr E2 Pr : projedVal V V_T ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< LB: apply projedCtxs_lookupScopes_exists_forward to _ _ _ PC Ev2. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H4 : is_expr E2 Pr : projedVal V V_T LB : lookupScopes Rec EE_T VB LB1 : projedVal RV VB ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply lookupScopes_is to _ Ev2. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H4 : is_expr E2 Pr : projedVal V V_T LB : lookupScopes Rec EE_T VB LB1 : projedVal RV VB H5 : is_value RV ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply matchRec_is to _ Ev3. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H4 : is_expr E2 Pr : projedVal V V_T LB : lookupScopes Rec EE_T VB LB1 : projedVal RV VB H5 : is_value RV H6 : is_list (is_pair is_string is_value) FieldVals ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< M: apply matchRec_projedVal to LB1 _ Ev3. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB Fs' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H4 : is_expr E2 Pr : projedVal V V_T LB : lookupScopes Rec EE_T VB LB1 : projedVal RV VB H5 : is_value RV H6 : is_list (is_pair is_string is_value) FieldVals M : matchRec VB Fs' M1 : projedFields FieldVals Fs' ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply projedFields_updateRecFields_exists_forward to _ M1 Pr Ev4. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB Fs' RB IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H4 : is_expr E2 Pr : projedVal V V_T LB : lookupScopes Rec EE_T VB LB1 : projedVal RV VB H5 : is_value RV H6 : is_list (is_pair is_string is_value) FieldVals M : matchRec VB Fs' M1 : projedFields FieldVals Fs' H7 : updateRecFields Fields V_T Fs' RB H8 : projedFields NewVals RB ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply projedCtxs_replaceScopes_exists_forward to _ _ _ PC _ Ev5 with VB = recVal RB. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V RV FieldVals NewVals E Fields Rec E2 V_T VB Fs' RB RB1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V O * Ev2 : lookupScopes Rec (Scope::EE) RV Ev3 : matchRec RV FieldVals Ev4 : updateRecFields Fields V FieldVals NewVals Ev5 : replaceScopes Rec (recVal NewVals) (Scope::EE) EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O H4 : is_expr E2 Pr : projedVal V V_T LB : lookupScopes Rec EE_T VB LB1 : projedVal RV VB H5 : is_value RV H6 : is_list (is_pair is_string is_value) FieldVals M : matchRec VB Fs' M1 : projedFields FieldVals Fs' H7 : updateRecFields Fields V_T Fs' RB H8 : projedFields NewVals RB H9 : replaceScopes Rec (recVal RB) EE_T RB1 H10 : projedCtxs EE' RB1 ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< search. Subgoal 5.2.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply matchTrue_projedVal to Pr _ Ev2. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchTrue V_T ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply ctx_names_add_scope to Ctxs. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchTrue V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply projedCtxs_add_scope to PC. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchTrue V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans1 Ev3. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchTrue V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) EvB2 : evalStmt FE_T ([]::EE_T) Th2 EE_T' O3 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< PC+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 Ev3 EvB2. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchTrue V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) EvB2 : evalStmt FE_T ([]::EE_T) Th2 EE_T' O3 PC+ : projedCtxs (Scope1::EE') EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< case PC+. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T BRest B IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Th (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchTrue V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) EvB2 : evalStmt FE_T ([]::EE_T) Th2 (B::BRest) O3 H8 : forall X VB, lookup B X VB -> exists VA, lookup Scope1 X VA H9 : forall X VA, lookup Scope1 X VA -> exists VB, lookup B X VB H10 : forall X VA VB, lookup Scope1 X VA -> lookup B X VB -> projedVal VA VB H11 : projedCtxs EE' BRest ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< search. Subgoal 5.2.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply matchFalse_projedVal to Pr _ Ev2. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchFalse V_T ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply ctx_names_add_scope to Ctxs. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchFalse V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply projedCtxs_add_scope to PC. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchFalse V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans2 Ev3. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchFalse V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) EvB2 : evalStmt FE_T ([]::EE_T) El2 EE_T' O3 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< PC+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvB2. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchFalse V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) EvB2 : evalStmt FE_T ([]::EE_T) El2 EE_T' O3 PC+ : projedCtxs (Scope1::EE') EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< case PC+. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 V_T BRest B IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchFalse V Ev3 : evalStmt FE ([]::(Scope::EE)) El (Scope1::EE') O3 * Ev4 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H4 : is_value V H5 : matchFalse V_T H6 : ctx_names ([]::(Scope::EE)) ([]::Names') H7 : projedCtxs ([]::(Scope::EE)) ([]::EE_T) EvB2 : evalStmt FE_T ([]::EE_T) El2 (B::BRest) O3 H8 : forall X VB, lookup B X VB -> exists VA, lookup Scope1 X VA H9 : forall X VA, lookup Scope1 X VA -> exists VB, lookup B X VB H10 : forall X VA VB, lookup Scope1 X VA -> lookup B X VB -> projedVal VA VB H11 : projedCtxs EE' BRest ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< search. Subgoal 5.2.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans (keep). Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans1 Ev1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply matchTrue_projedVal to Pr _ Ev2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< Ctxs+: apply ctx_names_add_scope to Ctxs. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< PC+: apply projedCtxs_add_scope to PC. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans2 Ev3. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< PC+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvB2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') PC+ : projedCtxs ([]::(Scope::EE)) ([]::EE_T) EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope1::EE3) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< PC': case PC+. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope1::EE3) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< IsEE3+: apply evalStmt_isCtx to _ _ _ Ev3. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope1::EE3) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE3) ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case IsEE3+. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope1::EE3) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T H5 : is_list (is_pair is_string is_value) Scope1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply transS_is to _ _ Trans2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 Scope1 EE3 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope1::EE3) O3 * Ev4 : evalStmt FE EE3 (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope1::EE3) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T H5 : is_list (is_pair is_string is_value) Scope1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_stmt Body2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< NS: apply evalStmt_names_same to _ _ _ Ev3. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' Scope' EE'' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::EE'') O3 * Ev4 : evalStmt FE EE'' (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope'::EE'') EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) EE'' H7 : is_stmt Body2 NS : names_same (Scope::EE) EE'' ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case NS. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' Scope' BRest B IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< CN: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev3. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Names2 Body2 Cond2 V_T EE_T' Scope' BRest B IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : ctx_names (Scope'::(B::BRest)) Names2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< CN: case CN. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T EE_T' Scope' BRest B BRest1 B1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B1::BRest1) EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope' CN2 : ctx_names (B::BRest) BRest1 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case CN2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T EE_T' Scope' BRest B B1 BRest2 B2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2)) EvB1 : evalExpr FE_T EE_T Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::EE_T) Body2 EE_T' O3 PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) EE_T H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case PC. Subgoal 5.2.8: Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T EE_T' Scope' BRest B B1 BRest2 B2 BRest3 B3 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2)) EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 EE_T' O3 PC+1 : projedCtxs (Scope'::(B::BRest)) EE_T' PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) (B3::BRest3) H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB H17 : projedCtxs EE BRest3 ============================ exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
< NS: apply evalStmt_names_same to _ _ _ EvB2. Subgoal 5.2.8: Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B B1 BRest2 B2 BRest3 B3 Scope'1 EE''1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2)) EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::EE''1) O3 PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::EE''1) PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) (B3::BRest3) H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB H17 : projedCtxs EE BRest3 NS : names_same (B3::BRest3) EE''1 ============================ exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
< case NS. Subgoal 5.2.8: Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B B1 BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2)) EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3 PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::(B4::BRest4)) PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) (B3::BRest3) H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB H17 : projedCtxs EE BRest3 H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4 H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3 H20 : names_same BRest3 BRest4 ============================ exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
< IsBR4+: apply evalStmt_isCtx to _ _ _ EvB2. Subgoal 5.2.8: Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B B1 BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2)) EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3 PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::(B4::BRest4)) PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) (B3::BRest3) H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB H17 : projedCtxs EE BRest3 H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4 H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3 H20 : names_same BRest3 BRest4 IsBR4+ : is_list (is_list (is_pair is_string is_value)) (Scope'1::(B4::BRest4)) ============================ exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
< case IsBR4+. Subgoal 5.2.8: Variables: Names' Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B B1 BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3) IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B1::(B2::BRest2)) EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::Names') EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3 PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::(B4::BRest4)) PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) (B3::BRest3) H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K B1 CN1 : forall K, mem K B1 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB H17 : projedCtxs EE BRest3 H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4 H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3 H20 : names_same BRest3 BRest4 H21 : is_list (is_pair is_string is_value) Scope'1 H22 : is_list (is_list (is_pair is_string is_value)) (B4::BRest4) ============================ exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
< apply transS_old_scopes to _ _ Trans2. Subgoal 5.2.8: Variables: Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 Scope'2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3) IsNames : is_list (is_list is_string) (B2::BRest2) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (B2::BRest2) Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'2::(B2::BRest2)) EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::(B2::BRest2)) EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3 PC+1 : projedCtxs (Scope'::(B::BRest)) (Scope'1::(B4::BRest4)) PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) (B3::BRest3) H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K Scope'2 CN1 : forall K, mem K Scope'2 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB H17 : projedCtxs EE BRest3 H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4 H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3 H20 : names_same BRest3 BRest4 H21 : is_list (is_pair is_string is_value) Scope'1 H22 : is_list (is_list (is_pair is_string is_value)) (B4::BRest4) ============================ exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
< case PC+1. Subgoal 5.2.8: Variables: Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 Scope'2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3) IsNames : is_list (is_list is_string) (B2::BRest2) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (B2::BRest2) Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'2::(B2::BRest2)) EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::(B2::BRest2)) EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3 PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) (B3::BRest3) H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K Scope'2 CN1 : forall K, mem K Scope'2 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB H17 : projedCtxs EE BRest3 H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4 H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3 H20 : names_same BRest3 BRest4 H21 : is_list (is_pair is_string is_value) Scope'1 H22 : is_list (is_list (is_pair is_string is_value)) (B4::BRest4) H23 : forall X VB, lookup Scope'1 X VB -> exists VA, lookup Scope' X VA H24 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope'1 X VB H25 : forall X VA VB, lookup Scope' X VA -> lookup Scope'1 X VB -> projedVal VA VB H26 : projedCtxs (B::BRest) (B4::BRest4) ============================ exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev4 with T = while Cond2 Body2 EE_T = B4::BRest4 FE_T = FE_T O = O4. Subgoal 5.2.8: Variables: Scope EE FE FE_T EE' O V O2 O3 O4 O12 Body Cond Body2 Cond2 V_T Scope' BRest B BRest2 B2 BRest3 B3 Scope'1 BRest4 B4 Scope'2 EE_T'1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) (B3::BRest3) IsNames : is_list (is_list is_string) (B2::BRest2) RFE : rel_FE FE FE_T Ctxs : ctx_names (Scope::EE) (B2::BRest2) Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond V O2 * Ev2 : matchTrue V Ev3 : evalStmt FE ([]::(Scope::EE)) Body (Scope'::(B::BRest)) O3 * Ev4 : evalStmt FE (B::BRest) (while Cond Body) EE' O4 * Ev5 : O2 ++ O3 = O12 Ev6 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Cond Cond2 Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'2::(B2::BRest2)) EvB1 : evalExpr FE_T (B3::BRest3) Cond2 V_T O2 Pr : projedVal V V_T H3 : is_value V H4 : matchTrue V_T Ctxs+ : ctx_names ([]::(Scope::EE)) ([]::(B2::BRest2)) EvB2 : evalStmt FE_T ([]::(B3::BRest3)) Body2 (Scope'1::(B4::BRest4)) O3 PC' : forall X VB, lookup [] X VB -> exists VA, lookup [] X VA PC'1 : forall X VA, lookup [] X VA -> exists VB, lookup [] X VB PC'2 : forall X VA VB, lookup [] X VA -> lookup [] X VB -> projedVal VA VB PC'3 : projedCtxs (Scope::EE) (B3::BRest3) H5 : is_list (is_pair is_string is_value) Scope' H6 : is_list (is_list (is_pair is_string is_value)) (B::BRest) H7 : is_stmt Body2 H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope H10 : names_same EE BRest CN : forall K I, mem (K, I) Scope' -> mem K Scope'2 CN1 : forall K, mem K Scope'2 -> exists I, mem (K, I) Scope' H11 : forall K I, mem (K, I) B -> mem K B2 H12 : forall K, mem K B2 -> exists I, mem (K, I) B H13 : ctx_names BRest BRest2 H14 : forall X VB, lookup B3 X VB -> exists VA, lookup Scope X VA H15 : forall X VA, lookup Scope X VA -> exists VB, lookup B3 X VB H16 : forall X VA VB, lookup Scope X VA -> lookup B3 X VB -> projedVal VA VB H17 : projedCtxs EE BRest3 H18 : forall X IA, mem (X, IA) B3 -> exists IB, mem (X, IB) B4 H19 : forall X IB, mem (X, IB) B4 -> exists IA, mem (X, IA) B3 H20 : names_same BRest3 BRest4 H21 : is_list (is_pair is_string is_value) Scope'1 H22 : is_list (is_list (is_pair is_string is_value)) (B4::BRest4) H23 : forall X VB, lookup Scope'1 X VB -> exists VA, lookup Scope' X VA H24 : forall X VA, lookup Scope' X VA -> exists VB, lookup Scope'1 X VB H25 : forall X VA VB, lookup Scope' X VA -> lookup Scope'1 X VB -> projedVal VA VB H26 : projedCtxs (B::BRest) (B4::BRest4) H27 : evalStmt FE_T (B4::BRest4) (while Cond2 Body2) EE_T'1 O4 ============================ exists EE_T', evalStmt FE_T (B3::BRest3) (while Cond2 Body2) EE_T' O
< search. Subgoal 5.2.9: Variables: T Names Names' Scope EE EE_T FE FE_T O V Body Cond IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.9: Variables: T Names Names' Scope EE EE_T FE FE_T O V Body Cond IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.9: Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.9: Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvB : evalExpr FE_T EE_T Cond2 V_T O ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB. Subgoal 5.2.9: Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvB : evalExpr FE_T EE_T Cond2 V_T O Pr : projedVal V V_T ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply evalExpr_isValue to _ _ _ Ev1. Subgoal 5.2.9: Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvB : evalExpr FE_T EE_T Cond2 V_T O Pr : projedVal V V_T H3 : is_value V ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply matchFalse_projedVal to Pr _ Ev2. Subgoal 5.2.9: Variables: Names' Scope EE EE_T FE FE_T O V Body Cond Names2 Body2 Cond2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) Cond V O * Ev2 : matchFalse V H1 : is_expr Cond H2 : is_stmt Body Trans : transE Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvB : evalExpr FE_T EE_T Cond2 V_T O Pr : projedVal V V_T H3 : is_value V H4 : matchFalse V_T ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< search. Subgoal 5.2.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< PC': apply projedCtxs_add_scope to PC. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 PC' : projedCtxs ([]::(Scope::EE)) ([]::EE_T) ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< Ctxs': apply ctx_names_add_scope to Ctxs. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 PC' : projedCtxs ([]::(Scope::EE)) ([]::EE_T) Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< EvB: apply IH_S to _ _ _ _ _ _ RFE PC' Ctxs' Trans Ev1. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 PC' : projedCtxs ([]::(Scope::EE)) ([]::EE_T) Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names') EvB : evalStmt FE_T ([]::EE_T) S3 EE_T' O ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< PC+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 PC' : projedCtxs ([]::(Scope::EE)) ([]::EE_T) Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names') EvB : evalStmt FE_T ([]::EE_T) S3 EE_T' O PC+ : projedCtxs (Scope1::EE') EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< case PC+. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 BRest B IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 PC' : projedCtxs ([]::(Scope::EE)) ([]::EE_T) Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names') EvB : evalStmt FE_T ([]::EE_T) S3 (B::BRest) O H2 : forall X VB, lookup B X VB -> exists VA, lookup Scope1 X VA H3 : forall X VA, lookup Scope1 X VA -> exists VB, lookup B X VB H4 : forall X VA VB, lookup Scope1 X VA -> lookup B X VB -> projedVal VA VB H5 : projedCtxs EE' BRest ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< search. Subgoal 5.2.11: Variables: T Names Names' Scope EE EE_T FE FE_T O I O2 E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.11: Variables: T Names Names' Scope EE EE_T FE FE_T O I O2 E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.11: Variables: Names' Scope EE EE_T FE FE_T O I O2 E E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.11: Variables: Names' Scope EE EE_T FE FE_T O I O2 E E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB. Subgoal 5.2.11: Variables: Names' Scope EE EE_T FE FE_T O I O2 E E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O2 Pr : projedVal (intVal I) V_T ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< apply projedVal_intVal to Pr. Subgoal 5.2.11: Variables: Names' Scope EE EE_T FE FE_T O I O2 E E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 (intVal I) O2 Pr : projedVal (intVal I) (intVal I) ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< search. Subgoal 5.2.12: Variables: T Names Names' Scope EE EE_T FE FE_T O O2 E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.12: Variables: T Names Names' Scope EE EE_T FE FE_T O O2 E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.12: Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.12: Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB. Subgoal 5.2.12: Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O2 Pr : projedVal trueVal V_T ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< apply projedVal_trueVal to Pr. Subgoal 5.2.12: Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E trueVal O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 trueVal O2 Pr : projedVal trueVal trueVal ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< search. Subgoal 5.2.13: Variables: T Names Names' Scope EE EE_T FE FE_T O O2 E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.13: Variables: T Names Names' Scope EE EE_T FE FE_T O O2 E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.13: Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.13: Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB. Subgoal 5.2.13: Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O2 Pr : projedVal falseVal V_T ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< apply projedVal_falseVal to Pr. Subgoal 5.2.13: Variables: Names' Scope EE EE_T FE FE_T O O2 E E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E falseVal O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 falseVal O2 Pr : projedVal falseVal falseVal ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< search. Subgoal 5.2.14: Variables: T Names Names' Scope EE EE_T FE FE_T O S1 O2 E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.14: Variables: T Names Names' Scope EE EE_T FE FE_T O S1 O2 E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.14: Variables: Names' Scope EE EE_T FE FE_T O S1 O2 E E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.2.14: Variables: Names' Scope EE EE_T FE FE_T O S1 O2 E E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< Pr: apply trans_evalExpr_same to _ _ _ _ _ _ _ _ Ev1 EvB. Subgoal 5.2.14: Variables: Names' Scope EE EE_T FE FE_T O S1 O2 E E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 V_T O2 Pr : projedVal (stringVal S1) V_T ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< apply projedVal_stringVal to Pr. Subgoal 5.2.14: Variables: Names' Scope EE EE_T FE FE_T O S1 O2 E E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) (Scope::EE) O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE E E2 EvB : evalExpr FE_T EE_T E2 (stringVal S1) O2 Pr : projedVal (stringVal S1) (stringVal S1) ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< search. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply names_is to _ Ev1. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply proj_stmt_is to Ev2 _ _. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N S_P1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply IH_S to _ _ _ _ _ _ RFE PC _ Trans2 Ev3. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H3 : evalStmt FE_T EE_T T EE_T' O_P ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N EE_T' EE'' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H3 : evalStmt FE_T EE_T T EE_T' O_P Ev' : evalStmt FE (Scope::EE) S_P EE'' O Ev'1 : scopes_same EE' EE'' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply evalStmt_unique to _ _ _ Ev' Ev3. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' Names1 S_P EE_P O_P N EE_T' IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T PC : projedCtxs (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H3 : evalStmt FE_T EE_T T EE_T' O_P Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P Ev'1 : scopes_same EE' EE_P ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O_P
< search. Subgoal 5.3.1: Variables: T EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA nilArgs T Ev : evalArgs FE EE nilArgs [] [] @ ============================ exists V_T, evalArgs FE_T EE_T T V_T []
< case Trans. Subgoal 5.3.1: Variables: EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE nilArgs [] [] @ ============================ exists V_T, evalArgs FE_T EE_T nilArgs V_T []
< search. Subgoal 5.3.2: Variables: T EE EE_T FE FE_T O O2 O3 VRest V1 Rest E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsA : is_args (consArgs E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O ============================ exists V_T, evalArgs FE_T EE_T T V_T O
< case IsA. Subgoal 5.3.2: Variables: T EE EE_T FE FE_T O O2 O3 VRest V1 Rest E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest ============================ exists V_T, evalArgs FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.3.2: Variables: EE EE_T FE FE_T O O2 O3 VRest V1 Rest E A2 E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE E E2 Trans1 : transA Rest A2 ============================ exists V_T, evalArgs FE_T EE_T (consArgs E2 A2) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.3.2: Variables: EE EE_T FE FE_T O O2 O3 VRest V1 Rest E A2 E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE E E2 Trans1 : transA Rest A2 EvB1 : evalExpr FE_T EE_T E2 V_T O2 ============================ exists V_T, evalArgs FE_T EE_T (consArgs E2 A2) V_T O
< EvB2: apply IH_A to _ _ _ _ _ RFE _ Trans1 Ev2. Subgoal 5.3.2: Variables: EE EE_T FE FE_T O O2 O3 VRest V1 Rest E A2 E2 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalArgs FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE E E2 Trans1 : transA Rest A2 EvB1 : evalExpr FE_T EE_T E2 V_T O2 EvB2 : evalArgs FE_T EE_T A2 V_T1 O3 ============================ exists V_T, evalArgs FE_T EE_T (consArgs E2 A2) V_T O
< search. Subgoal 5.3.3: Variables: T EE EE_T FE FE_T V O IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V O @ ============================ exists V_T, evalArgs FE_T EE_T T V_T O
< Or: apply is_args_nilArgs_or_consArgs to IsA. Subgoal 5.3.3: Variables: T EE EE_T FE FE_T V O IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transA <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V O @ Or : <unknown K evalArgs> = nilArgs \/ (exists E A', <unknown K evalArgs> = consArgs E A') ============================ exists V_T, evalArgs FE_T EE_T T V_T O
< case Or. Subgoal 5.4.1: Variables: T EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF nilRecFieldExprs T Ev : evalRecFields FE EE nilRecFieldExprs [] [] @ ============================ exists V_T, evalRecFields FE_T EE_T T V_T []
< case Trans. Subgoal 5.4.1: Variables: EE EE_T FE FE_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE nilRecFieldExprs [] [] @ ============================ exists V_T, evalRecFields FE_T EE_T nilRecFieldExprs V_T []
< search. Subgoal 5.4.2: Variables: T EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsRF : is_recFieldExprs (consRecFieldExprs F E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O ============================ exists V_T, evalRecFields FE_T EE_T T V_T O
< case IsRF. Subgoal 5.4.2: Variables: T EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest ============================ exists V_T, evalRecFields FE_T EE_T T V_T O
< Trans: case Trans. Subgoal 5.4.2: Variables: EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE E E2 Trans1 : transRF Rest RF2 ============================ exists V_T, evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T O
< EvB1: apply IH_E to _ _ _ _ _ RFE PC Trans Ev1. Subgoal 5.4.2: Variables: EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E RF2 E2 V_T IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE E E2 Trans1 : transRF Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V_T O2 ============================ exists V_T, evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T O
< EvB2: apply IH_RF to _ _ _ _ _ RFE _ Trans1 Ev2. Subgoal 5.4.2: Variables: EE EE_T FE FE_T O O2 O3 VRest V1 F Rest E RF2 E2 V_T V_T1 IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) O @ Ev1 : evalExpr FE EE E V1 O2 * Ev2 : evalRecFields FE EE Rest VRest O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE E E2 Trans1 : transRF Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V_T O2 EvB2 : evalRecFields FE_T EE_T RF2 V_T1 O3 ============================ exists V_T, evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T O
< search. Subgoal 5.4.3: Variables: T EE EE_T FE FE_T V O IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V O @ ============================ exists V_T, evalRecFields FE_T EE_T T V_T O
< Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF. Subgoal 5.4.3: Variables: T EE EE_T FE FE_T V O IH_E : forall E T EE EE_T FE FE_T V O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transE E T -> evalExpr FE EE E V O * -> exists V_T, evalExpr FE_T EE_T T V_T O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> projedCtxs (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T EE EE_T FE FE_T V O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transA A T -> evalArgs FE EE A V O * -> exists V_T, evalArgs FE_T EE_T T V_T O IH_RF : forall RF T EE EE_T FE FE_T V O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> rel_FE FE FE_T -> projedCtxs EE EE_T -> transRF RF T -> evalRecFields FE EE RF V O * -> exists V_T, evalRecFields FE_T EE_T T V_T O IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T RFE : rel_FE FE FE_T PC : projedCtxs EE EE_T Trans : transRF <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V O @ Or : <unknown K evalRecFields> = nilRecFieldExprs \/ (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF') ============================ exists V_T, evalRecFields FE_T EE_T T V_T O
< case Or. Proof completed.
< Extensible_Theorem trans_getFunEvalInfo_forward : forall F F_T Name RetVar RVVal PNames Body, IsF : is_fun F -> Trans : transF F F_T -> GFEI : getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T on Trans. Subgoal 1: Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun (fun F1 RetTy RetVar1 InitVal Params Body1) Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 ============================ exists Body_T, getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
< case IsF. Subgoal 1: Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar1 H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body1 ============================ exists Body_T, getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
< Trans: case Trans. Subgoal 1: Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 PTys1 Names2 Names3 IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar1 H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body1 Trans : paramTys Params PTys1 Trans4 : domain PTys1 Names2 Trans5 : transS [RetVar1::Names2] Body1 Body2 Names3 ============================ exists Body_T, getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
< case GFEI. Subgoal 1: Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params RetTy PTys1 Names2 Names3 IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body2 Names1 H1 : is_string Name H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value RVVal H5 : is_list is_param Params H6 : is_stmt Body Trans : paramTys Params PTys1 Trans4 : domain PTys1 Names2 Trans5 : transS [RetVar::Names2] Body Body2 Names3 H7 : paramNames Params PNames ============================ exists Body_T, getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body2) Name RetVar RVVal PNames Body_T
< search. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body F_P IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * ============================ exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
< G: apply proj_getFunEvalInfo_forward to Trans1 _ GFEI. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body F_P IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G : getFunEvalInfo F_P Name RetVar RVVal PNames Body ============================ exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
< apply proj_fun_is to Trans1 _. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body F_P IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G : getFunEvalInfo F_P Name RetVar RVVal PNames Body H1 : is_fun F_P ============================ exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
< apply IH to _ Trans2 G. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body F_P Body_T IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G : getFunEvalInfo F_P Name RetVar RVVal PNames Body H1 : is_fun F_P H2 : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ============================ exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
< search. Proof completed.
< Theorem trans_getFunEvalCtx_forward : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T. ============================ forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T
< induction on 2. IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T ============================ forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T @ -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T
< intros IsFs Trans GFEI. Variables: Fs Fs_T FE IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T IsFs : is_list is_fun Fs Trans : transFuns Fs Fs_T @ GFEI : getFunEvalCtx Fs FE ============================ exists FE_T, getFunEvalCtx Fs_T FE_T
< Trans: case Trans. Subgoal 1: Variables: FE IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T IsFs : is_list is_fun [] GFEI : getFunEvalCtx [] FE ============================ exists FE_T, getFunEvalCtx [] FE_T
< case GFEI. Subgoal 1: IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T IsFs : is_list is_fun [] ============================ exists FE_T, getFunEvalCtx [] FE_T
< search. Subgoal 2: Variables: FE Rest1 F1 Rest F IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T IsFs : is_list is_fun (F::Rest) GFEI : getFunEvalCtx (F::Rest) FE Trans : transF F F1 Trans1 : transFuns Rest Rest1 * ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< case IsFs. Subgoal 2: Variables: FE Rest1 F1 Rest F IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T GFEI : getFunEvalCtx (F::Rest) FE Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< G: case GFEI. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< apply IH to _ Trans1 G1. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE_T IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest H3 : getFunEvalCtx Rest1 FE_T ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< apply trans_getFunEvalInfo_forward to _ Trans G. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE_T Body_T IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest H3 : getFunEvalCtx Rest1 FE_T H4 : getFunEvalInfo F1 FName RetVar RVVal PNames Body_T ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< search. Proof completed.
< Theorem projedCtxs_reflexive : forall L, is_list (is_list (is_pair is_string is_value)) L -> projedCtxs L L. ============================ forall L, is_list (is_list (is_pair is_string is_value)) L -> projedCtxs L L
< induction on 1. IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L ============================ forall L, is_list (is_list (is_pair is_string is_value)) L @ -> projedCtxs L L
< intros Is. Variables: L IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_list (is_pair is_string is_value)) L @ ============================ projedCtxs L L
< Is: case Is. Subgoal 1: IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L ============================ projedCtxs [] []
< search. Subgoal 2: Variables: T H IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_pair is_string is_value) H * Is1 : is_list (is_list (is_pair is_string is_value)) T * ============================ projedCtxs (H::T) (H::T)
< apply IH to Is1. Subgoal 2: Variables: T H IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_pair is_string is_value) H * Is1 : is_list (is_list (is_pair is_string is_value)) T * H1 : projedCtxs T T ============================ projedCtxs (H::T) (H::T)
< unfold . Subgoal 2.1: Variables: T H IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_pair is_string is_value) H * Is1 : is_list (is_list (is_pair is_string is_value)) T * H1 : projedCtxs T T ============================ forall X VB, lookup H X VB -> exists VA, lookup H X VA
< search. Subgoal 2.2: Variables: T H IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_pair is_string is_value) H * Is1 : is_list (is_list (is_pair is_string is_value)) T * H1 : projedCtxs T T ============================ forall X VA, lookup H X VA -> exists VB, lookup H X VB
< search. Subgoal 2.3: Variables: T H IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_pair is_string is_value) H * Is1 : is_list (is_list (is_pair is_string is_value)) T * H1 : projedCtxs T T ============================ forall X VA VB, lookup H X VA -> lookup H X VB -> projedVal VA VB
< intros LA LB. Subgoal 2.3: Variables: T H X VA VB IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_pair is_string is_value) H * Is1 : is_list (is_list (is_pair is_string is_value)) T * H1 : projedCtxs T T LA : lookup H X VA LB : lookup H X VB ============================ projedVal VA VB
< apply lookup_unique to LA LB. Subgoal 2.3: Variables: T H X VB IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_pair is_string is_value) H * Is1 : is_list (is_list (is_pair is_string is_value)) T * H1 : projedCtxs T T LA : lookup H X VB LB : lookup H X VB ============================ projedVal VB VB
< search. Subgoal 2.4: Variables: T H IH : forall L, is_list (is_list (is_pair is_string is_value)) L * -> projedCtxs L L Is : is_list (is_pair is_string is_value) H * Is1 : is_list (is_list (is_pair is_string is_value)) T * H1 : projedCtxs T T ============================ projedCtxs T T
< search. Proof completed.
< Extensible_Theorem trans_evalProgram_forward : forall P P_T A O, IsP : is_program P -> IsA : is_list is_value A -> Trans : transP P P_T -> Ev : evalProgram A P O -> evalProgram A P_T O on Trans. Subgoal 1: Variables: A O Main1 Funs1 Main Funs IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program (program Funs Main) IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Ev : evalProgram A (program Funs Main) O Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 ============================ evalProgram A (program Funs1 Main1) O
< case IsP. Subgoal 1: Variables: A O Main1 Funs1 Main Funs IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Ev : evalProgram A (program Funs Main) O Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main ============================ evalProgram A (program Funs1 Main1) O
< Ev: case Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O ============================ evalProgram A (program Funs1 Main1) O
< G: apply trans_getFunEvalCtx_forward to _ Trans1 Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T ============================ evalProgram A (program Funs1 Main1) O
< GM: apply trans_getFunEvalInfo_forward to _ Trans2 Ev1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T ============================ evalProgram A (program Funs1 Main1) O
< RFE: apply trans_getFunEvalCtx_rel_FE to _ Trans1 Ev G. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T ============================ evalProgram A (program Funs1 Main1) O
< Tr: apply trans_getFunEvalInfo_rel to _ Trans2 Ev1 GM. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N ============================ evalProgram A (program Funs1 Main1) O
< RFE': assert rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T). Subgoal 1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N ============================ rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
< unfold . Subgoal 1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N ============================ forall F RetVar1 RVVal PNames1 Body1, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) -> exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< intros L. Subgoal 1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) ============================ exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< L: case L. Subgoal 1.1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body1 Ev2 : zip PNames1 A InitEnv Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body1))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body1 EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar1::PNames1] Body1 Body_T N ============================ exists Body_T1 Names, lookup ((F, (RetVar1, (RVVal, (PNames1, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< search. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1))) ============================ exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< R: case RFE. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1))) R : forall F RetVar RVVal PNames Body, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< apply R to L1. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 Body_T1 Names IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1))) R : forall F RetVar RVVal PNames Body, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H3 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1))) H4 : transS [RetVar1::PNames1] Body1 Body_T1 Names ============================ exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< search. Subgoal 1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N ============================ forall F RetVar1 RVVal PNames1 Body_T1, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) -> exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< intros L. Subgoal 1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) ============================ exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< L: case L. Subgoal 1.1.2.1: Variables: A O Main1 Funs1 Main Funs FCtx Body InitEnv EE FE_T N F RetVar1 RVVal PNames1 Body_T1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body Ev2 : zip PNames1 A InitEnv Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body_T1 RFE : rel_FE FCtx FE_T Tr : transS [RetVar1::PNames1] Body Body_T1 N ============================ exists Body1 Names, lookup ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< search. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1))) ============================ exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< R: case RFE. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1))) R : forall F RetVar RVVal PNames Body, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< apply R1 to L1. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 Body1 Names IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1))) R : forall F RetVar RVVal PNames Body, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H3 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1))) H4 : transS [RetVar1::PNames1] Body1 Body_T1 Names ============================ exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< search. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) ============================ evalProgram A (program Funs1 Main1) O
< Is: apply getFunEvalInfo_is to _ Ev1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body ============================ evalProgram A (program Funs1 Main1) O
< apply zip_is to _ _ Ev2. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv ============================ evalProgram A (program Funs1 Main1) O
< IsIE: assert is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] ============================ evalProgram A (program Funs1 Main1) O
< PC: apply projedCtxs_reflexive to IsIE. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] ============================ evalProgram A (program Funs1 Main1) O
< Z: assert zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv). Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) ============================ evalProgram A (program Funs1 Main1) O
< apply zip_ctx_names to Z. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] ============================ evalProgram A (program Funs1 Main1) O
< apply getFunEvalCtx_is to _ Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx ============================ evalProgram A (program Funs1 Main1) O
< apply transFuns_is to _ Trans1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 ============================ evalProgram A (program Funs1 Main1) O
< apply getFunEvalCtx_is to _ G. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ============================ evalProgram A (program Funs1 Main1) O
< apply transF_is to _ Trans2. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T H8 : is_fun Main1 ============================ evalProgram A (program Funs1 Main1) O
< apply getFunEvalInfo_is to _ GM. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T H8 : is_fun Main1 H9 : is_string MainName H10 : is_string RetVar H11 : is_value RetVal H12 : is_list is_string PNames H13 : is_stmt Body_T ============================ evalProgram A (program Funs1 Main1) O
< apply trans_evalStmt_forward to _ _ _ _ _ _ RFE' PC _ Tr Ev3. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N EE_T' IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] PC : projedCtxs [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T H8 : is_fun Main1 H9 : is_string MainName H10 : is_string RetVar H11 : is_value RetVal H12 : is_list is_string PNames H13 : is_stmt Body_T H14 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) [(RetVar, RetVal)::InitEnv] Body_T EE_T' O ============================ evalProgram A (program Funs1 Main1) O
< search. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A <unknown I program> O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * ============================ evalProgram A P_T O
< Ev': apply proj_evalProgram_forward to Trans1 _ _ Ev. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A <unknown I program> O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * Ev' : evalProgram A P_P O ============================ evalProgram A P_T O
< apply proj_program_is to Trans1 _. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A <unknown I program> O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * Ev' : evalProgram A P_P O H1 : is_program P_P ============================ evalProgram A P_T O
< apply IH to _ _ Trans2 Ev'. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A <unknown I program> O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * Ev' : evalProgram A P_P O H1 : is_program P_P H2 : evalProgram A P_T O ============================ evalProgram A P_T O
< search. Proof completed.